Android.app.FragmentManager.findFragmentByTag(String tag)
使用Fragment,先獲取其實例,通過tag找到內存中的實例,如果取到null,再初始化實例。那么tag怎么獲取?
1、
的時候用戶指定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