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