アプリケーションのアクティビティ スタックのアクティビティにインスタンスを 1 つだけ持たせたいです。ListActivity であるいくつかの画面があり、その ListActivity の別のインスタンスが変更された (追加、編集、削除など) ときに、ListActivity の前のインスタンスでリストを更新するという苦痛と苦しみを経験したくありません。 (またはこれを行う簡単な方法はありますか?)。
注:singleTopがこれを達成することを読みました(ただし、戻るボタンを押すとアクティビティが破棄されます)が、機能しません。メニューがあり、Inbox 画面に移動してから QuickList 画面に移動し、次に Inbox 画面に再度移動すると、新しい Inbox アクティビティが作成されます。
現在、ListActivities で、launchMode を singleInstance に設定しています。問題は、startActivityForResult を使用して別のアクティビティを起動すると、onActivityResult ハンドラーがすぐに起動することです (新しいアクティビティが作成される前に)。結果を返すために次の画面で必要なアクションを実行すると、onActivityResult ハンドラーが起動しません。
何が起こっている?
新しいアクティビティを起動する方法は次のとおりです。
Intent intentLaunchQuickList = new Intent(ActivityMyList.this, ActivityQuickList.class);
startActivityForResult(intentLaunchQuickList, REQUEST_QUICKLIST);
結果を返す方法は次のとおりです。
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
QuickListItem qlItem = m_Adapter.getItem(position);
if (qlItem != null && qlItem.getQLId() != -1) {
Intent data = new Intent();
data.putExtra("ql_id", qlItem.getQLId());
if (getParent() == null) {
setResult(Activity.RESULT_OK, data);
}
else {
getParent().setResult(Activity.RESULT_OK, data);
}
}
finish();
}
これが私の onActivityResult ハンドラです:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_QUICKLIST) {
if (resultCode == Activity.RESULT_OK) {
Bundle extras = data.getExtras();
if (extras != null) {
int id = extras.getInt("ql_id");
if (id > 0) {
launchQLItemsThread(id);
}
}
}
}
}