У меня есть приложение для Android, которое подключается к твиттеру через twitter4j. В действии есть кнопка «Поделиться» и TextView. Поток показан ниже;
- Пользователь открывает действие, начиная с onCreate(), которое заполняет TextView
- Пользователь нажимает «Поделиться»
- Активность Twitter запускается для oAuth, пользователь вводит учетные данные и дает разрешение моему приложению
- Пользователь снова перенаправляется на действие, начиная с onCreate()
Моя проблема в том, что значение TextView теряется после второго onCreate().
- onCreate()
.
.
point = getIntent().getExtras().getInt("point");
.
.
- shareButton.onClick()
.
.
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
Intent intent = new Intent(Intent.ACTION_VIEW,
Uri.parse(requestToken.getAuthenticationURL()));// open twitter for authentication
intent .putExtra("point", point);
startActivityForResult(intent , 1);
}
});
thread.start();
.
.
Вещи, которые я пробовал до сих пор;
- используя startActivityForResult() вместо startActivity()
- используя намерение.putExtra() перед startActivity() и вызывая getIntent().getExtras().getInt("point") в onCreate(), но таких данных нет
- используя onSaveInstanceState() и onRestoreInstanceState(), но saveInstanceState имеет значение null
Скажите, пожалуйста, как я могу сохранить эти данные после обратного вызова в твиттере. Я могу использовать базу данных или общие настройки или что-то в этом роде, но есть ли другой способ?
Заранее спасибо.
ИЗМЕНИТЬ:
Когда программа переходит в твиттер и возвращается обратно, она снова начинается с onCreate(), как и при изменении ориентации. Когда ориентация меняется, «Bundle saveInstanceState» имеет значение, но в моем случае не имеет значения.
Как я могу получить saveInstanceState, который я установил ранее вручную, во втором запуске onCreate() после возврата обратного вызова Twitter?
РЕДАКТИРОВАТЬ 2:
Некоторые люди на этом сайте действительно странные. Я разместил ответ ниже как новый пост, но кто-то удалил его, заявив, что «новый пост должен включать ответ». Знаете что, в этом посте есть настоящий ответ. Не действуйте так, не прочитав всего этого. Я пишу это ниже как редактирование.
Большое спасибо за ваш ответ (@rod_torres). Я попробовал ваше решение (с i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) и без него) и в обоих случаях не смог добиться результата. Жизненный цикл, когда я установил singleTop, был таким, как показано ниже;
onCreate() -> Twitter -> onCreate()
onNewIntent() не вызывался после возвращения из Twitter. Активность была воссоздана как новый экземпляр, поэтому я могу вернуться с помощью кнопки «Назад» в порядке, указанном выше.
Я попробовал с singleTask, и это сработало (ответ на мой вопрос таков, для тех, кто удалил мой пост, не прочитав эту часть). он не создал новый экземпляр активности, и был вызван метод onNewIntent(). Когда я нажимаю кнопку «Назад», я перенаправляюсь на предыдущую активность моего приложения, а не на задачу браузера (Twitter), хотя Twitter был предыдущей активностью. Поток был похож;
onCreate() -> Twitter -> onCreate (с пакетами) -> onNewIntent()
Активность A -> Активность B -> Twitter -> Активность B (то же, что и предыдущая)
когда я возвращаюсь из Activity B;
Действие A -> Браузер
Кажется, что режим singleTask вывел задачу моего приложения на передний план со всеми действиями в нем и перенес задачу другого приложения (браузера) в задний стек. Я прав?
Но все же я не мог понять, почему ваше решение не сработало для меня. Я прочитал много документации по этому поводу и думаю, что это должно было сработать.
Кроме того, я не уверен, следует ли мне использовать singleTask. Может быть что-то не так, чего я еще не учел, какие-то минусы?