我有一个半复杂的问题,希望这里的人能够帮助我。
在单击事件上,我创建一个线程并基于此方法启动一个长时间运行的操作。长时间运行的任务完成后,它会回调另一个方法,该方法会向处理程序发送一个帖子:
@Override
public void contentSearchModelChanged(Model_ContentSearch csm, ArrayList<Class_Reminder> newRemindersList) {
remindersList = newRemindersList;
mHandler.post(mUpdateDisplayRunnable);
}
调用 Runnable:
// post this to the Handler when the background thread completes
private final Runnable mUpdateDisplayRunnable = new Runnable() {
public void run() {
updateDisplay();
}
};
最后,这是我的 updateDisplay() 方法正在做的事情:
private void updateDisplay() {
if (csModel.getState() != Model_ContentSearch.State.RUNNING) {
if(remindersList != null && remindersList.size() > 0){
r_adapter = new ReminderAdapater(Activity_ContentSearch.this, remindersList, thisListView);
thisListView.setAdapter(r_adapter);
r_adapter.notifyDataSetChanged();
}
}
}
当我正常执行此操作时,它的效果很好。但是,如果我在长时间运行的操作运行时更改方向,它就不起作用。它确实正确地进行了回调,并且提醒列表中确实有项目。但是当它到达这条线时:
r_adapter.notifyDataSetChanged();
没发生什么事。奇怪的是,如果我再次提交并让它再次运行整个过程(不改变方向),它实际上会更新两次视图,一次用于上一次提交,一次用于下一次。因此,视图会使用第一次提交的结果更新一次,然后再使用第二次提交的结果更新一次。所以适配器 DID 获取了数据,它只是没有刷新视图。
我知道这与方向变化有关,但我一生都无法弄清楚原因。任何人都可以帮忙吗?或者,任何人都可以提出一种处理具有方向变化的线程的替代方法吗?
巴拉