У меня есть приложение для Android, которое подключается к твиттеру через twitter4j. В действии есть кнопка совместного доступа и TextView. Поток подобен ниже;Данные Android теряются onCreate() после startActivity() для обратного вызова
- Пользователь открывает деятельность, начиная OnCreate(), который заполняющий TextView
- Пользователь нажимает «Отправить»
- Twitter активность запускается OAuth, пользователь учета учетные данные и дает разрешение на мое приложение
- Пользователь перенаправляется на деятельность снова начинает OnCreate()
Моя проблема заключается в том, что величина е e 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()
- с помощью intent.putExtra() перед startActivity() и призывающих getIntent(). GetExtras(). GetInt ("точка") в OnCreate(), но нет таких данных
- с использованием onSaveInstanceState() и onRestoreInstanceState(), но savedInstanceState является нулевым
Пожалуйста, скажите мне, как я могу сохраняться эти данные после того, как щебет обратного вызова. Я могу использовать базу данных или общие настройки или что-то в этом роде, но есть ли другой способ?
Заранее спасибо.
EDIT:
Когда программа идет в твиттер и вернуться, он снова начинается с OnCreate() так же, как при изменении ориентации. Когда меняется ориентация «Bundle savedInstanceState» имеет значение, но в моем случае не имеет значения.
Как я могу получить savedInstanceState, который я установил перед вручную, во втором запуске onCreate() после возврата обратного вызова twitter?
EDIT 2:
Некоторые люди в этом месте действительно странно. Я опубликовал ответ ниже как новый пост, но кто-то удалил его, заявив, что «новый пост должен включать ответ». Знаете что, , что сообщение имеет реальный ответ. Не поступай так, не читая все это. Я пишу это ниже как редактирование.
Большое спасибо за ваш ответ (@rod_torres). Я пробовал ваше решение (с i.addFlags и без него (Intent.FLAG_ACTIVITY_CLEAR_TOP)), и в обоих случаях я не мог достичь. Жизненный цикл, когда я устанавливал singleTop, был следующим:
OnCreate() -> Twitter -> OnCreate()
onNewIntent() не был вызван после вернуться из Twitter. Активность была воссоздана как новый экземпляр, поэтому я могу вернуться с помощью кнопки «Назад» в приведенном выше порядке.
Я пробовал с singleTask, и это сработало (Ответ на мой вопрос - это тот, кто удалил мой пост, не читая эту часть). он не создавал новый экземпляр активности и вызывался onNewIntent(). Когда я нажимаю кнопку «Назад», я перенаправил предыдущую активность моего приложения, а не задачу браузера (Twitter), хотя Twitter был предыдущим. Поток был похож;
OnCreate() -> Twitter -> OnCreate (с пучками) -> onNewIntent()
активность А -> активность В -> Twitter -> активность В (то же самое с предыдущей)
, когда я вернуться из Activity B;
активность А -> Браузер
кажется режим singleTask привел задачу моего приложения на первый план со всей деятельностью в нем и принес (браузер) задачу другого приложения для резервного стека. Я прав?
Но все же я не мог понять, почему ваше решение не сработало для меня. Я прочитал много документации об этом, и я думаю, что это должно было быть сработано.
Кроме того, я не уверен, следует ли использовать singleTask. Может быть, что-то не так, я еще не принимаю во внимание, какие-то недостатки?