Fragment的Tag

来源:互联网 发布:中文通用域名 诈骗 编辑:程序博客网 时间:2024/06/06 03:10

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

0 0