Android之Fragment

Fragment是什么?

Fragment(片段,碎片)在3.0以后出現(xiàn),主要是為了在大屏幕設(shè)備上支持動(dòng)態(tài)的和更靈活的UI設(shè)計(jì)(眾所周知android 3.0只轉(zhuǎn)為平板電腦設(shè)計(jì),屏幕顯示方面跟手機(jī)相比差異比較大)。為了適應(yīng)大屏幕設(shè)備上面視圖的轉(zhuǎn)換所以設(shè)計(jì)了fragment。

fragments.png

從上圖可以看出一個(gè)Activity中可以有多個(gè)Fragment,一個(gè)Fragment可以被多個(gè)Activity使用
Fragment必須顯示在Activity中

Fragment生命周期

fragment_lifecycle.png

因?yàn)镕ragment依存于Activity所以當(dāng)Activity生命周期結(jié)束時(shí)Fragment生命周期也會(huì)結(jié)束
1,初始化階段 4個(gè)
onAttach() 與歸屬Activity建立連接
onCreate() 初始化Fragment
onCreateView() 初始化Fragment中顯示的UI布局
onActivityCreatde() 歸屬Activity的onCreate()方法執(zhí)行完成
2, 顯示/隱藏 4個(gè)
onStart() 顯示Fragment
onResume() 獲得用戶焦點(diǎn)
onPause() 失去用戶焦點(diǎn)
onStop() 關(guān)閉Fragment
3, 銷毀階段 3個(gè)
onDestroyView() 銷毀Fragment顯示的UI布局
onDestroy() 銷毀Fragment
onDetach() 與歸屬Activity斷開(kāi)連接
靜態(tài)方式:
顯示: F:onAttach -- F:onCreate -- F:onCreateView -- M:onCreate -- F:onActivityCreated -- M:onStar -- F:onStrar -- M:onResume -- F:onResume
退出: F:onPause -- M:onPause -- F:onStop -- M:onStop -- F:onDestroyView -- F:onDestroy -- F:ondetach -- M:onDestroy
動(dòng)態(tài)方式:
顯示: M:onCrate -- F:onAttach -- F:onCreate -- F:onCreateView --F:onActivityCreated -- M:onStar -- F:onStrar -- M:onResume -- F:onResume
退出: F:onPause -- M:onPause -- F:onStop -- M:onStop -- F:onDestroyView -- F:onDestroy -- F:ondetach -- M:onDestroy

如何創(chuàng)建Fragment

  • 定義一個(gè)類繼承Fragment
    public classMyFragment extends Fragment{}
  • 重寫父類的生命周期的方法
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment, null);//fragment為自定義要顯示的布局
    return view;
    }

Fragment的顯示方式

  • 靜態(tài)顯示(固定內(nèi)容,不需要接受數(shù)據(jù))
    1.在Activity要顯示的布局文件中通過(guò)<fragment/>標(biāo)簽引入
    2.在標(biāo)簽中需指定id,用來(lái)標(biāo)識(shí)Fragment的唯一性(因?yàn)橐粋€(gè)Activity可以有多個(gè)Fragment)
    3.在標(biāo)簽中指定name屬性,指定要顯示的Fragment(屬性值為包名.類名)
  • 動(dòng)態(tài)顯示
    1.在顯示的布局頁(yè)面中,通過(guò)布局容器占位
    2.在Activity中得到Fragment管理器對(duì)象
    FragmentManager manager = getFragmentManager();
    3.開(kāi)啟一個(gè)事務(wù)
    FragmentTransaction transaction = manager.beginTransaction();
    4.動(dòng)態(tài)顯示Fragment
    transaction.replace(R.id.layout1, new Left_Fragment());
    5.提交事務(wù)
    transaction.commit();
  • tansaction方法
    替換 replace
    移除 remove
    添加 add
    隱藏 hide
    顯示 show
    transaction.addToBackStack(null);//將當(dāng)前的Fragment加入到回退棧中

Fragment傳值

  • Activity向Fragment傳值
    Activity中
    Bundle bundle = new Bundle();
    bundle.putString(key,value);
    fragment.setArguments(bundle);
    Fragment中
    Bundle bundle = getArguments();
    String key = bundle.getString(key);
  • Fragment向Activity傳值(接口回調(diào))
    Fragment中
    public void getEditText(CallBack callBack)
    {
    String msg = et.getText().toString().trim();
    callBack.sendResult(msg);
    }
    //回調(diào)接口
    public interface CallBack
    {
    public void sendResult(String result);
    }
    Activity中
    fragment.getEditText(new CallBack() {
    @Override
    public void sendResult(String result) {
    tv.setText(result);
    }
    });
  • Fragment向Fragment傳值
    LeftFragment :
    //傳值
    RightFragment fragment = new RightFragment();
    Bundle args = new Bundle();
    args.putString("name", data.get(position));
    fragment.setArguments(args);
    RightFragment:
    //取值
    Bundle bundle = getArguments();
    String name = bundle.getString("name");
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容