【发布时间】:2013-12-20 11:42:56
【问题描述】:
我正在单击列表视图项目时打开新活动,我按下返回按钮我想将列表视图设置在同一位置。例如,我在列表视图中单击 25 项,当我返回列表视图时显示第一个元素,我想在列表视图中显示 25 项。
【问题讨论】:
我正在单击列表视图项目时打开新活动,我按下返回按钮我想将列表视图设置在同一位置。例如,我在列表视图中单击 25 项,当我返回列表视图时显示第一个元素,我想在列表视图中显示 25 项。
【问题讨论】:
使用 Fragment 包装您的 Listview。设置setRetainInstance(true) 以便在恢复实例后自动恢复所有属性。您无需再次使用 Bundles。然后保存第一个可见项的位置和偏移量以恢复准确的位置。 (如果您不使用 Fragments,则需要将 top 和 index 存储在 bundle 中)
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
【讨论】:
存储位置并在按下后退键时设置它
@Override
public boolean onKeyDown (int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
listview.setSelection(position);
return true;
}
return super.onKeyDown(keyCode, event);
}
【讨论】:
您可以将最后点击位置存储在某处并在后按 ....in onresume() ...执行此操作..
对于直接滚动:
getListView().setSelection(21);
为了平滑滚动:
getListView().smoothScrollToPosition(21);
【讨论】:
当从一个listview遍历时,源activity的onPause()方法被调用。您可以通过在末尾添加以下行来维护listview的状态:
index = list.getFirstVisiblePosition();
在源活动的 on resume(onResume()) 中,在末尾添加以下行:
list.setSelectionFromTop(index, 0);
这应该可以解决问题。
【讨论】:
使用 ListView.setSelection(int position) 方法。它将选择指定位置的列表项,但前提是不在触摸模式下。如果在触摸模式下,它只会滚动到指定位置,以便该位置的项目是屏幕上的第一个。
【讨论】:
在 onPause() 方法中:
index = listView.getFirstVisiblePosition();
在 onResume() 方法中:
listView.setSelection(index);
除此之外,还必须确认:setSelection(int position)方法在listView的setAdapter()之后被调用,否则listView会被重置。
【讨论】: