【发布时间】:2015-09-15 12:08:54
【问题描述】:
我在 ViewPager 中有一个片段。 Fragment 包含一个 RecyclerView(想想 ListView)。当用户翻页然后返回片段时,无论用户离开列表的哪个位置,列表总是从顶部重新开始。所以我需要以某种方式保留currPosition。 savedInstanceState 是存储它的好地方吗?如果是,我在哪个回调中读取数据?同样,这是在 ViewPager 中,我使用的是 FragmentPagerAdapter,因此调用的回调并不多。我的更广泛的问题仍然存在:是什么导致 Fragment 的 savedInstanceState 不为空?
进一步扩大问题的范围。想象一下,我有一个包含两个片段的活动。我在需要时分离并附加碎片。假设我离开活动。如果活动的 savedInstanceState 不为空,在这种情况下,片段的 savedInstanceState 是否会为空?确切地说,这里是第二种情况的一些代码
private void addMainFragment() {
FragmentManager fm=getSupportFragmentManager();
FragmentTransaction transaction = fm.beginTransaction();
Fragment removeFragment = fm.findFragmentByTag(getString(R.string.fragment_a));
if(null != removeFragment){
transaction.detach(removeFragment);
}
Fragment fragment = fm.findFragmentByTag(getString(R.string.fragment_b));
if(null != fragment){
transaction.attach(fragment);
}else{
fragment=MainFragment.newInstance(null,null);
交易。
添加(R.id.fragment_container,片段,getString(R.string.fragment_b));
}
事务.commit(); }
【问题讨论】:
-
它被用于在诸如方向变化之类的事情上重新创建一个片段(类似于它在活动中的处理方式)。 stackoverflow.com/questions/15313598/… 应该可以帮助您了解情况,但要点是您明确保存您的状态,以便您可以明确恢复它。
-
不错的链接。但我在那里看不到我的案子。不过,谢谢。
-
这只是你如何使用 savedInstanceState 的链接,我认为这不是你在这种情况下需要的。
标签: android android-fragments bundle