片段标签的使用

时间:2012-11-22 09:29:36

标签: android android-fragments

在Android中,您可以在FragmentTransaction中为Fragment设置标记。

为什么我需要为片段设置标签?

如果Fragment根据其标签更改了行为,这是一种好习惯吗?

2 个答案:

答案 0 :(得分:32)

可用于避免在Fragment方向更改时重新创建Activity

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.photos_image_pager);

    MyFragment fragment;
    if (savedInstanceState != null) {
        fragment = (MyFragment) getFragmentManager()
            .findFragmentByTag("my_fragment_tag");
    } else {
        fragment = new MyFragment();
        fragment.setArguments(getIntent().getExtras());
        getFragmentManager()
            .beginTransaction()
            .add(android.R.id.content, fragment, "my_fragment_tag")
            .commit(); 
    }
}

在方向更改时重新创建Activity,并调用onCreate(...)方法。如果FragmentActivity被销毁之前创建并添加到带有标记的FragmentManager,则现在可以通过相同标记从FragmentManager检索它。< / p>

有关如何使用的更长时间的讨论,请参阅:

答案 1 :(得分:2)

对于非UI片段:

  

为什么我需要为片段设置标签?

Fragment有时可以将Activity用作后台工作者。这样的片段没有UI,它也被称为非UI片段。 String tag是识别此片段的唯一方法。要添加此片段,请使用不add(Fragment, String)的{​​{1}}方法。例如:

View Id

然后,要获得对此片段的引用,

FragmentManager fm = getFragmentManager();
workFragment.setTargetFragment(this, 0);
fm.beginTransaction().add(workFragment, "work").commit();

现在使用workFragment = (WorkFragment)fm.findFragmentByTag("work"); 引用,您可以在workFragment或它的UI片段中访问此片段的所有方法。 Here's非UI片段的完整示例。

对于具有UI的片段:

  

如果Fragment基于改变其行为,那么这是一种很好的做法   它的标签?

在某些情况下,我们必须使用标记从Activity更改片段的行为。应该没问题,我看过一些使用这种做法的开源应用程序。基本上,您为片段提供字符串标记。这用于标记Activity中的片段,以便我们以后可以轻松查找。并从FragmentManager更改或访问它的行为。

例如: 用户从Activity切换到SettingsActivity,更改设置,按回按钮返回MainActivity。您可以在MainActivity#onResume()中检测设置更改,并根据新设置更新或更改当前片段的行为。

MainActivity