我有一个列表片段。
当用户点击列表项时,我用新闻片段替换列表片段。
当用户回来时(使用addToBackStack
),列表会滚动到顶部。
当用户按下列表项时,我希望我的列表保持相同的滚动级别..这可能吗?我怎么能得到这个结果?
这是我的代码,我替换列表片段:
myFragment myFragment = new myFragment();
myFragment.setArguments(bundle);
FragmentTransaction ft = getActivity().getSupportFragmentManager()
.beginTransaction();
ft.replace(R.id.phone_container, myFragment);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.addToBackStack(null);
ft.commit();
我尝试过类似的东西但是没有结果:
public void onResume() {
super.onResume();
Log.i("log", "onResume()");
setListAdapter(adapter);
if(index!=-1){
this.getListView().setSelectionFromTop(index, top);
}
}
public void onPause() {
super.onPause();
Log.i("log", "onPause()");
try {
index = this.getListView().getFirstVisiblePosition();
View v = this.getListView().getChildAt(0);
top = (v == null) ? 0 : v.getTop();
} catch (Throwable t) {
t.printStackTrace();
}
}
答案 0 :(得分:0)
从视图层次结构中删除片段时,实际上会破坏视图,但不会破坏片段。所以当它重新连接时再次调用onCreateView。这就是为什么你的列表再次滚动到顶部。
保存状态的方法是将其存储在实例变量中,然后再次使用onCreateView滚动到代码所在的最后位置(在适配器填充之后)。
这可能对更多细节有所帮助。 How can I maintain fragment state when added to the back stack?