我有一个带有片段容器布局的活动,在该布局中我加载了一个包含listview的片段A(listview从web加载数据)。现在点击listview项目我想显示详细视图。为此,我正在加载另一个片段B,它是细节片段。现在我首先使用
FragmentTransaction ft = ((FragmentActivity) context).getSupportFragmentManager().beginTransaction();
ft.replace(R.id.fragmentsContainerLayout, new ScheduleDetailsFragment());
ft.addToBackStack(null);
ft.commit();
但是使用replace删除包含listview的前一个片段A,并在再次按下它时重新加载片段A的onCreateView方法及其listview数据。我想阻止它在backpress上再次加载片段A(或发送对webserver的调用)。我想维护片段A状态及其列表视图滚动位置。要做到这一点,我使用了第二个选项
FragmentTransaction ft = ((FragmentActivity) context).getSupportFragmentManager().beginTransaction();
ft.add(R.id.fragmentsContainerLayout, new ScheduleDetailsFragment());
ft.addToBackStack(null);
ft.commit();
如果我使用add(),则片段B加载在片段A和片段A的顶部仍然可见。它显示两个片段彼此重叠并且透明。我还遇到了一个使用show()和hide()方法的解决方案。但我不认为这是实现这一目标的有效方法。有人能提出有效的解决方案吗?