使用 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();

至少对于这个特定片段。

再一次,这是一个 FragmentManagerSupportFragmentManager 的故事。我希望我能帮助别人。 :)