Chr*_*ris 14 android listview orientation
我在使用ListView setSelection方法时遇到了一些麻烦.在横向和纵向方向之间切换时,我试图使列表视图保持相同的索引.但是,每次旋转并重新创建活动时,列表视图都会从顶部开始.我使用的代码如下:
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
ArrayList<Integer> indices = new ArrayList<Integer>();
for (Integer i : f_checkedMessages) {
indices.add(i);
}
savedInstanceState.putIntegerArrayList("CheckedMessageIndices", indices);
savedInstanceState.putInt("ListIndex", f_listView.getFirstVisiblePosition());
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
ArrayList<Integer> indices = savedInstanceState.getIntegerArrayList("CheckedMessageIndices");
for (Integer i : indices) {
f_checkedMessages.add(i);
}
int listIndex = savedInstanceState.getInt("ListIndex");
f_listView.setSelection(listIndex);
}
Run Code Online (Sandbox Code Playgroud)
我使用调试器来验证listIndex是否是正确的值.还应该提到的是,在更改方向时,检查的列表视图项仍然存在.我知道如果处于触摸模式,setSelected仅选择列表视图项,但文档说这个方法将对齐列表视图,无论是否处于触摸模式.
有谁知道为什么这不起作用或者是否有更好的方法来解决这个问题?
谢谢,非常感谢您的帮助!
Tay*_*ldo 34
如果有进一步的帮助,在这个问题丢失几个小时之后,我设法使用相同的A-IV示例解决它,并做了一些修改.
首先,在执行runnable之前调用clearFocus()方法至关重要.
当调用方法setSelection(index)时,具有触摸模式控制器的设备没有视觉效果,但通常会选择该项.因此,有必要调用requestFocusFromTouch()来启用由方法setSelection(index)引起的视觉更改.
在调用setSelection(index)之后,调用requestFocus()以便为焦点进行查看.
@Override public void onRestoreInstanceState(Bundle savedInstanceState) {
...
final int listIndex = savedInstanceState.getInt("ListIndex");
f_listView.clearFocus();
f_listView.post(new Runnable() {
@Override
public void run() {
listView.requestFocusFromTouch();
listView.setSelection(listIndex);
listView.requestFocus();
}
});
Run Code Online (Sandbox Code Playgroud)
}
我希望我帮忙!
您可以使用以下代码来解决此问题
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
listView = getListView();
listView.setAdapter(adapter);
listView.post(new Runnable()
{
public void run()
{
listView.setSelection(position);
}
});
}
Run Code Online (Sandbox Code Playgroud)
要么
listView.setAdapter(adapter);
listView.setSelection(position);
adapter.notifyDataSetChanged();
Run Code Online (Sandbox Code Playgroud)
或请参考以下链接:
http://www.codeproject.com/Tips/514527/ListActivity-setSelection-within-onCreate
我希望你能得到解决方案.谢谢
数据更改后,您无法直接设置选择.试试这个:
@Override public void onRestoreInstanceState(Bundle savedInstanceState) {
...
final int listIndex = savedInstanceState.getInt("ListIndex");
f_listView.post(new Runnable() {
@Override
public void run() {
listView.setSelection(listIndex);
}
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19188 次 |
| 最近记录: |