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