片段标签的使用
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 Id
的 add(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();
【讨论】:
以上是关于片段标签的使用的主要内容,如果未能解决你的问题,请参考以下文章