我会直截了当地说。
我正在制作一个有三个标签的应用程序( MainFragment,FragmentCategories,FragmentList )。我接下来要做的是:
从第二个标签 FragmentCategories ,我打开了某个类别。使用getFragmentManager和FragmentTransaction,我打开一个 FragmentCategoriesList 。从那里,当我选择某个对象时,我想在另一个“子片段”中打开它。
按照一些教程, 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));
这是我选择一个对象的片段:
...
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 是一个具有相对布局的片段。
我的问题是:我可以做些什么才能使我的 FragCatDetail 片段像第一种情况一样工作(相对布局)并返回 FragmentCategoriesList 第二种情况(listview布局)。
提前致谢!非常感谢。
答案 0 :(得分:0)
弄清楚问题是什么。
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来做的。
在我的主要活动中,我覆盖了 onBackPressed(),而我正在使用
getFragmentManager().popBackStack();
其实我应该一直在使用
getSupportFragmentManager().popBackStack();
至少对于这个特定的片段。
再一次,它是 FragmentManager vs SupportFragmentManager 的故事。我希望我帮助过这个人。 :)