Java Android listfragment滚动到顶部
我有一个列表片段 当用户单击列表项时,我用一个新闻片段替换列表片段。 当用户返回时(使用Java Android listfragment滚动到顶部,java,android,android-fragments,fragment,android-listfragment,Java,Android,Android Fragments,Fragment,Android Listfragment,我有一个列表片段 当用户单击列表项时,我用一个新闻片段替换列表片段。 当用户返回时(使用addToBackStack),列表将滚动到顶部 当用户按下列表项时,我希望我的列表保持在相同的滚动级别。这可能吗?我如何获得此结果 这是我替换列表片段的代码: myFragment myFragment = new myFragment(); myFragment.setArguments(bundle); FragmentTransaction ft = getA
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();
}
}
从视图层次结构中删除片段时,实际上是销毁了视图,而不是片段。因此,当它重新连接时,它再次调用onCreateView。这就是为什么您的列表再次在顶部滚动 保存状态的方法是将其存储在实例变量中,然后再次使用onCreateView滚动到最后一个位置,就像您的代码那样(当然,在适配器填充之后) 这可能有助于了解更多细节。
请给我一些代码好吗?:)我无法编写您需要的特定代码。但是很简单,您已经在onResume方法中保存了索引。只需等待数据与适配器一起加载到列表中,即可恢复数据,而不是onResume()。最初,索引的值为0。当屏幕第一次显示时,只需按照您希望的方式将其加载到特定索引。实际上,当我返回到我的listView时,我可以看到列表项中的小图像以闪烁一秒钟。这是否意味着什么?您使用什么来加载图像。这意味着它们将被重新绘制,但由于内存中有它们,因此会立即绘制它们。照我说的做就行了。在onPause上保存索引,并在用项目填充listView后使用该索引以滚动到该索引。(第一次启动将为0,因此不管怎样都可以)。不,它不是重复的。