使用FragmentTransaction从ListFragment转到Fragment - 无法返回ListFragment

时间:2015-02-06 13:59:18

标签: android listview fragment fragmenttransaction

我会直截了当地说。

我正在制作一个有三个标签的应用程序( 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布局)。

提前致谢!非常感谢。

1 个答案:

答案 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 的故事。我希望我帮助过这个人。 :)