android - setSelection 后允许滚动 ListView

标签 android android-listview

我有一个 ListView ,每当更新列表时,我都会强制滚动到列表底部。但是,在滚动到列表底部后,出于某种原因, ListView 会固定在该点,用户无法在列表上来回滚动以查看其他数据。

问题:在 setSelection(list.getBottom()) 之后,我应该做什么才能再次滚动整个列表?

    @Override
        public View getView(int position, View convertView, ViewGroup parent) {
        /* the list is being populated here - the code has been omitted */          

            list.populateFrom(date, name, class);
            list.clearFocus();
            list.post(new Runnable() {

                @Override
                public void run() {

                    list.setSelection(list.getBottom());
                }
            });


        return list;
    }
}

最佳答案

问题在于你正在调用

 list.setSelection(list.getBottom());

getView() ,它被调用每次 ListView 需要绘制更多 View 。这意味着您不断向下滚动。

相反,从 Adapter 更新您拥有的数据集类(例如来自 Activity/Fragment ),然后重置 ListView的适配器或清除适配器并读取项目,然后调用 setSelection() .

一种方法:

  • Activity开始 AsyncTask

  • AsyncTask更新 List数据来自 doInBackground() .

  • onPostExecute() , 实例化 AdapterListdoInBackground() 传递.或者清空Adapter的数据集你目前有,然后遍历列表并将项目重新添加到 Adapter .

  • 如果重新实例化 Adapter , 设置 ListViewAdapter到你所创造的。

  • 调用 ListView#setSelection()

关于android - setSelection 后允许滚动 ListView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15319062/

相关文章:

android - 如何在运行时在android中使部分文本加粗?

android-notifyDataSetChanged 不适用于 BaseAdapter

android - 我的自定义适配器 (android) 怎么了?

android - Google 日历 API 授权错误

android - Flutter:Android 通知图标显示白色

android - 如何在录制时获取视频时长-Android

android - 检测 ListView(或 ScrollView)内的滚动位置

android - Gradle:有和没有<<运算符的定义任务的区别

android - 检测拨出电话,真实设备问题

android ListView mListView.getChildAt(i) 为null,如何解决?