片段标签的使用

Posted

技术标签:

【中文标题】片段标签的使用【英文标题】:Uses of fragment tags 【发布时间】:2012-11-10 15:53:52 【问题描述】:

android 中,您可以在 FragmentTransaction 中为 Fragment 设置标签。

为什么需要为 Fragment 设置标签?

如果 Fragment 根据其标签更改其行为,这是一种好的做法吗?

【问题讨论】:

【参考方案1】:

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

@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(...) 方法。如果Fragment 是在Activity 被销毁之前创建的,并通过标签添加到FragmentManager,那么现在可以通过相同的标签从FragmentManager 中检索它。

有关如何使用它的详细讨论,请参阅:

ViewPager and fragments - what's the right way to store fragment's state?

【讨论】:

对不起,我有点忘了我问过这个问题。谢谢你的信息,但我要问的是我应该使用标签来确定片段应该显示什么内容吗?【参考方案2】:

对于非 UI 片段:

为什么需要为 Fragment 设置标签?

有时Fragment 可以被Activity 用作后台工作人员。这种片段没有UI,也称为非UI片段。 String tag 是识别此片段的唯一方法。要添加此片段,请使用不采用 View Idadd(Fragment, String) 方法。例如:

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

然后,为了得到这个片段使用的引用,

workFragment = (WorkFragment)fm.findFragmentByTag("work");

现在使用workFragment 引用,您可以在Activity 或其UI 片段中访问此片段的所有方法。 Here's 非 UI 片段的完整示例。


对于带有 UI 的片段:

如果一个 Fragment 改变它的行为基于 它的标签?

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

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

FragmentManager fm = getFragmentManager();
uiFragment = (UiFragment) fm.findFragmentByTag("ui");
uiFragment.fetchNewData();
uiFragment.displayNewData();

【讨论】:

以上是关于片段标签的使用的主要内容,如果未能解决你的问题,请参考以下文章

操作栏标签片段中的片段?

在哪里以及如何使用片段填充我的标签

如何通过代码设置片段标签?

标签活动片段到活动

在标签片段android中添加谷歌地点选择器

当使用tablayout切换片段时,所有片段都会重新创建