반 복잡한 문제가 있으며 여기 누군가가 나를 도울 수 있기를 바랍니다.Android : notifyDataSetChanged() 방향 변경 후 목록보기가 업데이트되지 않습니다.
클릭 이벤트에서 스레드를 만들고 this 메서드를 기반으로 장기 실행 작업을 시작합니다. 의 Runnable 호출
@Override
public void contentSearchModelChanged(Model_ContentSearch csm, ArrayList<Class_Reminder> newRemindersList) {
remindersList = newRemindersList;
mHandler.post(mUpdateDisplayRunnable);
}
: 장기 실행 작업이 완료 후에는 핸들러에 게시물을하지 다른 방법에 콜백 않습니다 여기에, 마지막으로
// 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();
아무런 반응이 없습니다. 이상한 점은 다른 제출을하고 전체 프로세스를 다시 실행하면 (오리 엔테이션을 변경하지 않고) 실제로는 이전 제출과 다시 제출을 위해 두 번보기를 두 번 업데이트한다는 것입니다. 따라서 뷰는 첫 번째 제출 결과로 한 번 업데이트되고 두 번째 결과는 두 번째로 나중에 업데이트됩니다. adapater가 데이터를 얻지 못하면 뷰를 새로 고치지 않습니다.
나는 이것이 오리엔테이션 변화와 관련이 있다는 것을 알고있다. 그러나 나는 왜 그런지 알 수 없다. 누구든지 도와 줄 수 있습니까? 아니면 방향 변경으로 스레드를 처리하는 다른 방법을 제안 할 수 있습니까?
바라
음 ... 매우 도움이되는 것 같지만 문서가 많지 않습니다. 내 구현을 DroidFu를 사용하여 변경하는 것을 싫어하고 문제를 해결하는 방법을 알지 못합니다. 이는 일을하는 "일반적인"방식이 아니기 때문입니다. – Bara
그래, 오래된 버려진 도서관 인 것처럼 보이지만 그 전제는 건전 해 보입니다. 라이브러리를 사용하지 않고도이 작업을 수행 할 수 있습니다. 기본적으로 Application 개체는 onResume을 사용하여 활성 활동을 추적합니다. 그런 다음 어댑터에 알릴 준비가되면 응용 프로그램에서 활성 활동을 가져오고 예상 활동의 인스턴스인지 확인한 후 캐스트하고 통지하십시오. –
"활성 활동"을 추적하는 코드는 무엇입니까? 즉, 내가 CurrentActivity act = new CurrentActivity();와 같은 것을해야 하는가? act를 Application 클래스에 전달하면됩니까? – Bara