我希望我的应用程序的Activity堆栈上的活动只有一个实例。 我有几个屏幕是ListActivities,我不想在更改ListActivity的另一个实例时(添加,编辑,删除等)更新以前ListActivity中的列表(或者是否有一种简单的方法可以做到这一点?)。
注意:我已经阅读过singleTop将实现此目的(尽管如果按下返回按钮,它会销毁Activity),但它不起作用。 如果我转到收件箱屏幕,然后转到我的快速列表屏幕,然后再次转到我的收件箱屏幕,它会创建一个新的收件箱Activity。
现在,在我的ListActivities中,我将launchMode设置为singleInstance。 问题是:如果我使用startActivityForResult启动另一个Activity,则onActivityResult处理程序会立即触发(在创建新Activity之前)。 当我执行下一个屏幕上必要的操作以返回结果时,onActivityResult处理程序不会触发。
发生了什么?
以下是我如何启动新的Activity:
注意:我已经阅读过singleTop将实现此目的(尽管如果按下返回按钮,它会销毁Activity),但它不起作用。 如果我转到收件箱屏幕,然后转到我的快速列表屏幕,然后再次转到我的收件箱屏幕,它会创建一个新的收件箱Activity。
现在,在我的ListActivities中,我将launchMode设置为singleInstance。 问题是:如果我使用startActivityForResult启动另一个Activity,则onActivityResult处理程序会立即触发(在创建新Activity之前)。 当我执行下一个屏幕上必要的操作以返回结果时,onActivityResult处理程序不会触发。
发生了什么?
以下是我如何启动新的Activity:
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);
}
}
}
}
}