我在列表视图项目上打开新活动点击,我按下后退按钮我想在同一位置设置列表视图。所以例如我在列表视图中单击25项,当我回来时列表视图是显示第一个元素我要在列表视图中显示25项。
答案 0 :(得分:2)
使用片段包装Listview。设置setRetainInstance(true)
以便在恢复实例后自动恢复所有属性。您不需要再次使用Bundles。然后保存第一个可见项目的位置和偏移量以恢复精确位置。 (如果您没有使用片段,则需要在包中存储top
和index
)
private int top;
private int index;
@Override onPause(){
int index = mList.getFirstVisiblePosition();
View v = mList.getChildAt(0);
int top = (v == null) ? 0 : v.getTop();
super.onPause();
}
@Override onResume(){
super.onResume();
mList.setSelectionFromTop(index, top);
}
看看here
答案 1 :(得分:2)
存储位置并将其设置为按下后退键
@Override
public boolean onKeyDown (int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
listview.setSelection(position);
return true;
}
return super.onKeyDown(keyCode, event);
}
答案 2 :(得分:0)
你可以在某个地方存储最后点击位置,然后按下....在onresume()...这样做..
直接滚动:
getListView().setSelection(21);
顺畅滚动:
getListView().smoothScrollToPosition(21);
答案 3 :(得分:0)
当从listview遍历onPause()时,调用源活动的方法。您可以通过在结尾添加以下行来维护列表视图的状态:
index = list.getFirstVisiblePosition();
在源活动的on resume(onResume())中,最后添加以下行:
list.setSelectionFromTop(index, 0);
这应该可以解决问题。
答案 4 :(得分:0)
使用ListView.setSelection(int position)方法。它将在指定位置选择列表项,但仅在未处于触摸模式时。如果处于触摸模式,它将只滚动到指定的位置,以便位置上的项目是屏幕上的第一个。
答案 5 :(得分:0)
在onPause()方法中:
index = listView.getFirstVisiblePosition();
在onResume()方法中:
listView.setSelection(index);
除此之外,您必须确认:在setSelection(int position)
listView之后调用setAdapter()
方法,否则将重置listView。