本文主要是介绍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
这篇关于Fragment的Tag的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!