Я бы хотел, чтобы действия в стеке действий моего приложения имели только один экземпляр. У меня есть несколько экранов ListActivities, и я бы не хотел испытывать трудности и страдания от обновления списков в предыдущем экземпляре ListActivity, когда другой экземпляр этого ListActivity изменен (добавлен, отредактирован, удален и т. Д.) (или есть простой способ сделать это?).
Примечание: я читал, что singleTop выполнит это (хотя он уничтожит активность, если вы нажмете кнопку назад), но он не работает. У меня есть меню, и если я перехожу на экран «Входящие», я перехожу на экран «QuickList», а затем снова на экран «Входящие», он создает новое действие «Входящие».
Прямо сейчас в моих 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);
}
}
}
}
}