我正在开发一个应用程序,它有1个活动,有2个按钮(Map和Listview)。通过单击按钮,片段到FrameLayout需要从列表视图更改为mapview(或从map到listview)。
我得到了这个工作,片段显示数据,因为我想要但是......
通过在片段之间切换,我遇到了一些问题。我挣扎着代码,我工作的最好的就是:
FragmentManager fragmentManager;
Fragment listOverview;
AlertOverviewMapsFragment mapsOverview;
@Bind(R.id.fr_overviewContainer) FrameLayout fr_overviewContainer;
@OnClick(R.id.btn_list_overview) void openListOverview()
{
// Add the fragment to the 'fragment_container' FrameLayout
if (listOverview == null) { listOverview = new AlertOverviewListFragment();}
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fr_overviewContainer.removeAllViews();
fragmentTransaction.add(R.id.fr_overviewContainer, listOverview).commit();
}
@OnClick(R.id.btn_maps_overview) void openMapsOverview()
{
// Add the fragment to the 'fragment_container' FrameLayout
if (mapsOverview == null){ mapsOverview = new AlertOverviewMapsFragment();}
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fr_overviewContainer.removeAllViews();
fragmentTransaction.add(R.id.fr_overviewContainer, mapsOverview).commit();
}
问题是,当我第二次点击按钮时,应用程序崩溃,我收到java.lang.IllegalStateException: Fragment already added
错误。我理解这意味着我将片段添加到管理器(或事务,dunno)。我可以为此创建或找到一些解决方法但是因为这不是什么新鲜事我在寻找在2个片段之间切换(替换)的常用方法。
片段包含从互联网上加载的数据,当数据被保存并通过重新加载片段再次加载时,它会很好。 (因此用户在后台再次更新时会看到旧数据)
一个CLEAR代码示例会很好.....
我读了一些关于片段管理器和事务的内容,因此据我所知,管理器可以添加,删除,删除交易中的.........片段?所以我每次活动需要1个交易?还是扭曲了?所以经理包含片段?这一部分不清楚,对我来说真的很复杂。我很高兴当有人可以帮助我解决我的问题时,如果有人可以解释交易和管理人员如何以简单的方式工作,那将会很好,因为我刚开始编写Android应用程序。
感谢您阅读我的问题,感谢那些花时间和耐心写下答案的人们!