我的应用程序上有这个“问题”,我总是困扰我,我不理解它的行为,但从来不关心问为什么,直到现在。
我有ListView
(通过ListActivity
实施),每个列表项都有自定义布局。有了这个我有一个自定义CursorAdapter
来正确填充所有列表项元素(覆盖newView
和bindView
,ViewHolder模式在这样做时已经得到保证,请参阅:{{ 3}}如果需要的话。)
这是主要活动,有2个操作可以更新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
{/ 1}}。
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,这是路线图中的内容,但我暂时还没有时间处理这些代码重写。我想我会告诉你的。现在,我只需要知道当前代码发生了什么。
答案 0 :(得分:1)
您对startManagingCursor()
的来电意味着当活动停止时,Cursor
将停用,重新启动活动后,系统会重新Cursor
。
我是否可以在onActivityResult上强制使用cursor.requery()?
这应该会自动发生在您的托管Cursor
。