在 Android 中,您可以在 FragmentTransaction 中为 Fragment 设置标签。
为什么我需要为片段设置标签?
如果 Fragment 根据其标签更改其行为,这是一种好的做法吗?
在 Android 中,您可以在 FragmentTransaction 中为 Fragment 设置标签。
为什么我需要为片段设置标签?
如果 Fragment 根据其标签更改其行为,这是一种好的做法吗?
片段标签可用于避免重新创建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(...)
调用其方法。如果是在被销毁Fragment
之前创建的,并且使用标签添加到 ,那么现在可以通过相同的标签从 中检索它。Activity
FragmentManager
FragmentManager
有关如何使用它的更长讨论,请参阅:
为什么我需要为片段设置标签?
有时,Fragment
可以将Activity
. 这种片段没有UI,也称为非UI片段。这String tag
是识别此片段的唯一方法。要添加此片段,请使用add(Fragment, String)
不需要View Id
. 例如:
FragmentManager fm = getFragmentManager();
workFragment.setTargetFragment(this, 0);
fm.beginTransaction().add(workFragment, "work").commit();
然后稍后,要获得对这个片段使用的引用,
workFragment = (WorkFragment)fm.findFragmentByTag("work");
现在使用workFragment
引用,您可以在Activity
它的 UI 片段中访问此片段的所有方法。这是非 UI 片段的完整示例。
如果 Fragment 根据其标签更改其行为,这是一种好的做法吗?
在某些情况下,我们必须通过Activity
使用标签来改变片段的行为。这样做应该没问题,我见过一些开源应用程序使用这种做法。基本上,您为片段提供字符串标签。这用于标记 中的片段,FragmentManager
以便我们稍后可以轻松查找它。并从Activity
.
例如:用户切换到SettingsActivity
from MainActivity
,更改设置,按下返回按钮返回到 MainActivity。您可以检测 MainActivity#onResume() 中的设置更改,并根据新设置更新或更改当前片段的行为。
FragmentManager fm = getFragmentManager();
uiFragment = (UiFragment) fm.findFragmentByTag("ui");
uiFragment.fetchNewData();
uiFragment.displayNewData();