我有一个比较复杂的问题,希望这里有人能帮助我。
在点击事件中,我创建了一个线程,并基于此方法开始了长时间运行的操作。完成长时间运行任务后,它会回调另一个方法,该方法会向处理程序进行发布。具体方法请参考这里。
最后,这是我的updateDisplay()方法所做的事情:
在点击事件中,我创建了一个线程,并基于此方法开始了长时间运行的操作。完成长时间运行任务后,它会回调另一个方法,该方法会向处理程序进行发布。具体方法请参考这里。
@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();
}
}
}
通常情况下,我这样做时效果非常好。然而,如果我在长时间运行的操作期间更改方向,则不起作用。它确实正确地进行了回调,并且remindersList中确实有项目。但是当它到达这一行时:
r_adapter.notifyDataSetChanged();
什么也没有发生。奇怪的是,如果我再次提交并运行整个过程(不改变方向),它实际上会更新视图两次,一次为上一次提交的结果,然后一秒钟后再次更新为下一次提交的结果。所以适配器确实获得了数据,只是没有刷新视图。
我知道这与方向变化有关,但我无法想出原因。有人可以帮忙吗?或者,有人可以建议处理方向更改的替代方法吗?
巴拉