我有一个 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()
, 实例化Adapter
与List
从doInBackground()
传递.或者清空Adapter
的数据集你目前有,然后遍历列表并将项目重新添加到Adapter
.如果重新实例化
Adapter
, 设置ListView
的Adapter
到你所创造的。调用
ListView#setSelection()
关于android - setSelection 后允许滚动 ListView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15319062/