使用 FragmentTransaction 从 ListFragment 到 Fragment - 无法返回到 ListFragment
Going from ListFragment to Fragment using FragmentTransaction - can't go back to the ListFragment
开门见山
我正在制作一个具有三个选项卡(MainFragment、FragmentCategories、FragmentList)的应用程序。接下来我要做的是:
在第二个选项卡 FragmentCategories 中,我打开了某个类别。使用 getFragmentManager 和 FragmentTransaction,我打开了一个 FragmentCategoriesList。从那里,当我选择某个对象时,我想在另一个 "subfragment".
中打开它
根据一些教程,MyFragmentCategoriesList 使用了 ListView 布局。
context = getActivity().getApplicationContext();
view = inflater.inflate(R.layout.fragment_categories_list, container, false);
稍后在代码中,我初始化了一个使用相同布局的 ListView 对象 (R.layout.fragment_categories_list == R.id.frag_cat_list).
final ListView lv1 = (ListView) view.findViewById(R.id.frag_cat_list);**
lv1.setAdapter(new MyCustomBaseAdapter(context, searchResults));
这是我 select 一个对象的片段:
...
data.putString("selection",test);
FragmentManager fragManager = myContext.getSupportFragmentManager();
FragmentTransaction fragTrans = fragManager.beginTransaction();
FragmentCategoriesDetail FragCatDetail = new FragmentCategoriesDetail();
FragCatDetail.setArguments(data);
fragTrans.add(R.id.frag_cat, FragCatDetail);
fragTrans.addToBackStack(null);
fragTrans.commit();
...
不管怎样,问题是这样的:
fragTrans.add(R.id.frag_cat, FragCatDetail);
在这种情况下,我的 FragCatDetail 可以工作,但我无法返回到 FragmentCategoriesList。如果我放置 R.id.listview(包含两个文本视图的相对布局 xml),我的 Fragment 在 ListView 的对象中打开,我可以返回到 FragmentCategoriesList.
如果我放R.id.frag_cat_list(毕竟是当前片段的布局,FragmentCategoriesList),我的应用崩溃
java.lang.UnsupportedOperationException: addView(View) is not supported in AdapterView
这似乎合乎逻辑,因为 FragCatDetail 是一个具有相对布局的 Fragment。
我的问题是:我该怎么做才能让我的 FragCatDetail 片段像第一种情况(相对布局)一样工作并返回 FragmentCategoriesList 就像第二种情况(列表视图布局)。
提前致谢!非常感谢。
找出问题所在。
FragmentManager fragManager = myContext.getSupportFragmentManager();
FragmentTransaction fragTrans = fragManager.beginTransaction();
FragmentCategoriesDetail FragCatDetail = new FragmentCategoriesDetail();
FragCatDetail.setArguments(data);
fragTrans.add(R.id.frag_cat, FragCatDetail);
fragTrans.addToBackStack(null);
fragTrans.commit();
在整个应用程序中,我使用了
getFragmentManager().popBackStack()
。因为我要去一个新的片段(FragmentCategoriesDetail),所以我是通过 getSupportFragmentManager 来做的。
在我的 Main Activity 中,我覆盖了 onBackPressed() 并且我在里面使用
getFragmentManager().popBackStack();
实际上我应该使用的地方
getSupportFragmentManager().popBackStack();
至少对于这个特定片段。
再一次,这是一个 FragmentManager 与 SupportFragmentManager 的故事。我希望我能帮助别人。 :)
开门见山
我正在制作一个具有三个选项卡(MainFragment、FragmentCategories、FragmentList)的应用程序。接下来我要做的是:
在第二个选项卡 FragmentCategories 中,我打开了某个类别。使用 getFragmentManager 和 FragmentTransaction,我打开了一个 FragmentCategoriesList。从那里,当我选择某个对象时,我想在另一个 "subfragment".
中打开它根据一些教程,MyFragmentCategoriesList 使用了 ListView 布局。
context = getActivity().getApplicationContext();
view = inflater.inflate(R.layout.fragment_categories_list, container, false);
稍后在代码中,我初始化了一个使用相同布局的 ListView 对象 (R.layout.fragment_categories_list == R.id.frag_cat_list).
final ListView lv1 = (ListView) view.findViewById(R.id.frag_cat_list);**
lv1.setAdapter(new MyCustomBaseAdapter(context, searchResults));
这是我 select 一个对象的片段:
...
data.putString("selection",test);
FragmentManager fragManager = myContext.getSupportFragmentManager();
FragmentTransaction fragTrans = fragManager.beginTransaction();
FragmentCategoriesDetail FragCatDetail = new FragmentCategoriesDetail();
FragCatDetail.setArguments(data);
fragTrans.add(R.id.frag_cat, FragCatDetail);
fragTrans.addToBackStack(null);
fragTrans.commit();
...
不管怎样,问题是这样的:
fragTrans.add(R.id.frag_cat, FragCatDetail);
在这种情况下,我的 FragCatDetail 可以工作,但我无法返回到 FragmentCategoriesList。如果我放置 R.id.listview(包含两个文本视图的相对布局 xml),我的 Fragment 在 ListView 的对象中打开,我可以返回到 FragmentCategoriesList.
如果我放R.id.frag_cat_list(毕竟是当前片段的布局,FragmentCategoriesList),我的应用崩溃
java.lang.UnsupportedOperationException: addView(View) is not supported in AdapterView
这似乎合乎逻辑,因为 FragCatDetail 是一个具有相对布局的 Fragment。
我的问题是:我该怎么做才能让我的 FragCatDetail 片段像第一种情况(相对布局)一样工作并返回 FragmentCategoriesList 就像第二种情况(列表视图布局)。
提前致谢!非常感谢。
找出问题所在。
FragmentManager fragManager = myContext.getSupportFragmentManager();
FragmentTransaction fragTrans = fragManager.beginTransaction();
FragmentCategoriesDetail FragCatDetail = new FragmentCategoriesDetail();
FragCatDetail.setArguments(data);
fragTrans.add(R.id.frag_cat, FragCatDetail);
fragTrans.addToBackStack(null);
fragTrans.commit();
在整个应用程序中,我使用了
getFragmentManager().popBackStack()
。因为我要去一个新的片段(FragmentCategoriesDetail),所以我是通过 getSupportFragmentManager 来做的。
在我的 Main Activity 中,我覆盖了 onBackPressed() 并且我在里面使用
getFragmentManager().popBackStack();
实际上我应该使用的地方
getSupportFragmentManager().popBackStack();
至少对于这个特定片段。
再一次,这是一个 FragmentManager 与 SupportFragmentManager 的故事。我希望我能帮助别人。 :)