微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

android – setSelection不改变ListView的位置

我使用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);
}

我使用调试器来验证listIndex是否是正确的值.还应该提到,当更改方向时,检查的列表视图项目会持续存在.我知道setSelected只有在触摸模式下才能选择列表视图项,但文档说这个方法可以使列表视图对齐,而不管是否处于触摸模式.

有人知道为什么这不工作,还是有更好的方法呢?

谢谢,您的帮助非常感谢!

解决方法

如果进一步的帮助,经过几个小时的迷失与这个问题,我设法解决它使用与A-IV相同的例子,一些修改.

首先,在执行runnable之前调用clearFocus()方法是很重要的.

调用方法setSelection(index)时,具有触摸模式控制器的设备没有视觉效果,但通常会选择该项.因此,有必要调用requestFocusFromTouch()来启用由方法setSelection(index)引起的可视化更改.

调用setSelection(索引)后,调用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();
    }
});

}

我希望我帮忙!

原文地址:https://www.jb51.cc/android/311536.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐