Fragment的Tag


Android.app.FragmentManager.findFragmentByTag(String tag)


使用Fragment,先獲取其實例,通過tag找到內存中的實例,如果取到null,再初始化實例。那么tag怎么獲取?

1、

android.app. FragmentTransaction.replace( int containerViewId, Fragment fragment, String tag)

的時候用戶指定tag,

如:

        FragmentManager manager = getChildFragmentManager();//嵌套Fragment需要getChildFragmentManager
        if (manager != null) {
            // Add default fragments to view. Try to reuse old fragments or create new ones
            FragmentTransaction transaction = manager.beginTransaction();
            AnalogClockFragment mClockFragment = (AnalogClockFragment) manager
                    .findFragmentByTag("AnalogClockFragment");
            if (mClockFragment == null) {
                mClockFragment = new AnalogClockFragment();//子Fragment實例
                transaction.replace(R.id.clock_frame, mClockFragment, "AnalogClockFragment");//tag   AnalogClockFragment
            } else {
                transaction.show(mClockFragment);
            }
            transaction.commit();

}


2、Fragment實例化的時候Android系統會給Fragment對象一個默認的tag

查看源代碼 android.support.v4.app.FragmentPagerAdapter

private String getFragmentTag(int position){
//看源代碼 android.support.v4.app.FragmentPagerAdapter
return "android:switcher:"+R.id.pager+":"+position;
}

然后根據tag獲取fragment對象

getActivity().getFragmentManager().findFragmentByTag(getFragmentTag(position));

這里的position是:如果有多個fragment,position是其順序號,從0開始,0、1、2。。。

這里的R.id.pager是:fragment所在View容器控件id


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM