내 앱에 언젠가는이 "문제"가 있었으며 항상 문제가 있다는 것을 이해하지 못했지만 지금까지 왜 그런지 묻지 않았습니다.왜 맞춤 CursorAdapter로 관리되는 ListView가 새로운 데이터로 자동으로 새로 고침됩니까?
각 목록 항목에 대한 사용자 지정 레이아웃이있는 ListView
(ListActivity
을 통해 구현 됨)이 있습니다. 그걸로 나는 모든 목록 항목 요소 (newView
및 을 오버라이드하고 ViewHolder 패턴은 이와 같은 작업을 수행 할 때 이미 보장 된 사용자 정의 CursorAdapter
)을 가지고 있습니다 (필요한 경우 https://codereview.stackexchange.com/q/1057 참조).
이것은 주요 활동이며 ListView
의 내용을 업데이트하거나, 새 항목을 만들거나, 현재 항목을 편집 할 수있는 두 가지 작업이 있습니다. 두 경우 모두, 같은 활동은 다음과 같이 (작업 유형에 자신을 적응하는) 뭔가를 사용 : 실제로 작업 유형을 구분 무엇
startActivityForResult(intent, ACTIVITY_NOTE_EDITOR_CREATE);
startActivityForResult(intent, ACTIVITY_NOTE_EDITOR_EDIT);
는 의도 내용입니다의 requestCode
은 서브 활동에 무시됩니다.
이 활동 종료가, 당신의 onActivityResult를() 메소드가 주어진 requestCode가 함께 를 호출합니다 :
이제 문서는 위의 방법에 대해 할 말이이 있습니다.
그러나 나는 onActivityResult
을 사용하지 않습니다. 사실, 하위 활동이있는 경우 (작성 또는 편집 모드에서) 아무 것도하지 않습니다. 그리고 내가 지금까지 나타났습니다 동작은 이것이다 :
- 만들기 : 나는 주요 활동으로 돌아 거의 모든 시간은
ListView
가 자동으로 새 항목으로 업데이트됩니다. 그러나 때로는 드문 경우이지만ListView
에는 새 항목이 채워지지 않습니다. 나는 주 활동 (예를 들어 앱을 종료)을 파괴하고 그것을 재현해야하고 새로운 아이템이 거기에있게 될 것이다. - 편집 : 작성 작업에 대해 설명한 것과 비슷한 동작이 발생하지 않았습니다. 지금까지
ListView
은 항상 새 콘텐츠 변경 사항으로 자동 업데이트되었습니다.
내 질문은, 내 ListView
가 자동으로 내가 cursor.requery()
를 호출하지 않고 수동으로 내용을 변경 통지 않을 때 내용의 업데이트 할 수 무대 뒤에서 무슨 일이 일어나고 있는지? 왜 지옥이 항상 작동하지 않는 걸까요?
cursor.requery()
을 onActivityResult
에 보내야하나요?
public class MainActivity extends ListActivity {
private static final int ACTIVITY_NOTE_EDITOR_CREATE = 0;
private NotificationHelper mNotificationHelper;
private AgendaNotesAdapter mAgendaAdapter;
private Cursor mAllNotesCursor;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mNotificationHelper = Program.getNotificationHelper();
mAgendaAdapter = new AgendaNotesAdapter(this);
mAgendaAdapter.open();
initializeNotesListActivity();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
Intent intent;
switch(item.getItemId()) {
case R.id.actionbar_item_new_note:
intent = NoteEditorMainActivity.createIntent(this);
startActivityForResult(intent, ACTIVITY_NOTE_EDITOR_CREATE);
return true;
}
return false;
}
private void initializeNotesListActivity() {
mAllNotesCursor = mAgendaAdapter.fetchAllNotes();
startManagingCursor(mAllNotesCursor);
NotesListAdapter notesAdapter = new NotesListAdapter(this, mAllNotesCursor,
mNotificationHelper, mAgendaAdapter);
setListAdapter(notesAdapter);
}
}
P.S : 나는 CursorLoader에 대해 알고 있으며 로드맵에 뭔가하지만 나는 그런 코드가 당분간 재 작성을 처리 할 시간이 없습니다. 내가 너 한테 알려줄 줄 알았어. 현재로서는 현재 코드가 어떻게되는지 알 필요가 있습니다.
주요'ListActivity' 또는 적어도 onCreate 메소드에 대한 코드를 게시하십시오. – Luksprog
관련 코드가 업데이트되었습니다. –
답변으로 게시 할 가치는 없지만 onActivityResult()에서 initializeNotesListAdapter() 클래스를 호출 할 수는 있습니다. 최종 솔루션 (사용자에게 짜증나게 할 수있는 ListView의 위치를 다시 설정 함)로 사용되지는 않지만 적어도이 목록에 새 항목이 추가되는지 확인하는 데 도움이 될 수 있습니다. – JMRboosties