我正在开发具有一个活动和多个片段的 android 应用程序。我的应用程序包含导航抽屉。它的布局包含列表视图。单击它的项目我会动态更改片段ft.replace(R.id.my_placehodler, new MyFragment())
并将事务添加到backstack ft.addToBackstack(null)
. 当我每次实例化新片段时进行新事务时。在我看来,这不是一个好方法。你能给我一些关于进行片段交易的正确方法的建议吗?
问问题
86 次
2 回答
0
如果您要避免为同一类 Fragment 实例化多个实例,即您希望每个 Fragment 类有一个实例,则可以使用标签识别每个 Fragment。
@Override
public void onNavigationDrawerItemSelected(int position) {
String tag = "";
switch (position) {
case 0:
tag = "fragment_0";
break;
case 1:
tag = "fragment_1";
break;
case 2:
tag = "fragment_2";
break;
}
FragmentManager fragmentManager = getFragmentManager();
Fragment fragment = fragmentManager.findFragmentByTag(tag);
if (fragment == null) {
// Only in case there is no already instaciated one,
// a new instance will be instanciated.
switch (position) {
case 0:
fragment = new Fragment_class_0();
break;
case 1:
fragment = new Fragment_class_1();
break;
case 2:
fragment = new Fragment_class_2();
break;
}
}
fragmentManager.beginTransaction().replace(R.id.container, fragment, tag).commit();
}
于 2014-12-03T13:54:25.723 回答
0
只需调用一个setFragment(FragmentClassObject,false,"fragment");
方法。
public void setFragment(Fragment fragment, boolean backStack, String tag) {
manager = getSupportFragmentManager();
fragmentTransaction = manager.beginTransaction();
if (backStack) {
fragmentTransaction.addToBackStack(tag);
}
fragmentTransaction.replace(R.id.content_frame, fragment, tag);
fragmentTransaction.commit();
}
于 2014-12-03T13:43:09.983 回答