문제 : 활동 A는 ListAdapter
을 포함하는 ListView
이고 어댑터의 항목을 클릭하면 활동 B가됩니다. 활동 B에는 웹에서 새 항목 (또는 여러 항목)을 가져 오는 버튼이 있습니다 (AsyncTask
사용). 눌렀을 때 활동 A에 표시된 목록에 추가합니다. B에서의 작업은 ProgressDialog
에 의해 차단되지 않으므로 B가 데이터 가져 오기를 시작한 AsyncTask
전에 사용자가 A로 다시 이동할 수 있습니다.활동의 어댑터를 다른 활동에서 어떻게 업데이트 할 수 있습니까?
그래서 난 B.
I가 B에서의 버튼을 누르면 A. 의해ListView
표시 정적 데이터 클래스 C가
에서의 어댑터를 갱신하는 방법을 필요로, 그 값을 추가 C. 그 클래스는 또한 정적 필드로 A에서 어댑터를 가지고 있지만,이 Context
에서 메모리 누수가 생각하고, 그 나쁜 것입니다. 이 문제를 해결하기위한 첫 번째 아이디어는 C에서 고정 어댑터를 제거하고 A onResume()
(어댑터의 데이터가 C와 다른 경우) 어댑터의 데이터를 다시 C로로드하고 notifyDatasetChanged()
입니다. 대부분의 경우 작동하지만 사용자가 웹에서 데이터를 가져 오기 전에 B에서 A로 돌아 가면 데이터가 가져 오기 전에 onResume()
이 오기 때문에 어댑터가 업데이트되지 않습니다.
질문 : A의 어댑터를 B에서 업데이트하는 더 좋은 방법이 있습니까?
데이터가 여전히 활동 B에서 페치되는 동안 사용자는 BACK 버튼을 누른 다음 ('onActivityResult()'의 결과 코드로 'RESULT_CANCEL'을 얻을 수 있음) 어떻게 진행할 것입니까? – Luksprog
바로. B의 데이터는 AsyncTask에서 페치되고 끝나면 C의 데이터를 설정합니다. 사용자가 B에서 BACk를 누르면 활동이 종료되지만 데이터는 여전히 AsyncTask에서 페치됩니다. – hgm
나는 그 질문을 오해했다. 그 죄송합니다. 편집 된 답변에 두 가지 해결책을 추가했습니다. –