私はやや複雑な問題を抱えており、ここの誰かが私を助けてくれることを願っています.
クリック イベントで、スレッドを作成し、このメソッドに基づいて実行時間の長い操作を開始します。長時間実行タスクが完了すると、別のメソッドへのコールバックが実行され、ハンドラーへのポストが実行されます。
@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();
何も起こりません。奇妙なことに、別の送信を行い、プロセス全体を (向きを変更せずに) 再度実行すると、実際にはビューが 2 回更新されます。したがって、ビューは最初の送信の結果で 1 回更新され、2 番目の送信の結果で 1 秒後に更新されます。したがって、アダプター DID はデータを取得しますが、ビューを更新していません。
これがオリエンテーションの変更と関係があることは知っていますが、私の人生では理由を理解できません. 誰でも助けることができますか?または、向きを変更してスレッドを処理する別の方法を誰かが提案できますか?
バラ