我在这里遇到一个奇怪的问题。
在我的应用程序中,用户需要在更新一些首选项onLoadFinished
后重新启动加载程序,这一切都很好,事情是我设置mAdapter.notifyDataSetChanged();
它一直滚动到底部列表。
奇怪的是,它只发生一次,第一次重启加载器。所有其他时间视图仍然保持原样。
我正在通知UI线程的更改......
getLoaderManager().initLoader(EXISTING_EVAL_LOADER, null, ViewActivity.this);
runOnUiThread(new Runnable() {
public void run() {
mAdapter.notifyDataSetChanged();
}
});
如果我没有致电notifyDataSetChanged();
该应用仅在列表项目上崩溃,请点击,我会:
java.lang.IllegalStateException:适配器的内容有 已更改,但ListView未收到通知。确保 您的适配器的内容不会从后台线程修改,但是 仅来自UI线程。确保适配器调用 notifyDataSetChanged()在其内容发生变化时。
答案 0 :(得分:0)
我建议
if (cursor.getCount() > 0) {
cursor.moveToPosition(-1);
while (cursor.moveToNext()) {
<do stuff>
}
}
cursor.close();
答案 1 :(得分:0)
我猜您的listView
为CHOICE_MODE_SINGLE
,并且listView
中选择了最后一项,因此listView
会滚动到所选内容。
如果您不需要在listView
上选择项目,请使用此选项:
listView.setChoiceMode(ListView.CHOICE_MODE_NONE)
或xml:android:choiceMode="none"
否则,如果您需要选择设置,请在listView
:
listView.clearChoices();
listView.setAdapter(listView.getAdapter());
如果您想要选择第一个项目并滚动到顶部,您可以使用以下代码:
listView.setSelectionAfterHeaderView();
或
listView.setSelection(0);