Передача данных из активности в другие [не работает]

1

Из моего класса StartActivity, который является Actvity, я вызываю другое действие, используя намерение.

Intent intent = new Intent(getApplicationContext(), TabsActivity.class);
intent.putExtra(CHANGE_PACK, changePack);
startActivity(intent);

CHANGE_PACK является статическим окончательным значением String и changePack является true. (Я проверил его путем отладки)

Но когда я получаю это значение в TabsActivity,

boolean packChanged = getIntent().getBooleanExtra(StartActivity.CHANGE_PACK, false);

Значение packChanged равно false. Я проверил в Интернете, но помощь не найдена. В основном я использую то же самое, что и в моем приложении, и он работает нормально.

Любой может сказать, почему он не работает.

Дополнительно: обе действия зарегистрированы в манифесте, и я делаю это в методе onResume() обеих видов деятельности.

  • 0
    Старайтесь не смешивать тип данных.
  • 0
    changePack также является логическим значением. Я устанавливаю логическое значение и пытаюсь получить логическое значение.
Теги:
android-intent

5 ответов

3

Попробуйте запустить getIntent().getBooleanExtra(...) в onCreate вместо этого. Или Переопределите protected void onNewIntent(Intent intent) и protected void onNewIntent(Intent intent) ваше логическое значение из этого объекта-объекта.

3

Проверьте, как TabsActivity android:launchMode объявлен в манифесте. Если это singleTop или singleTask вы должны использовать onNewIntent() в своей TabsActivity (вместо onResume), чтобы получать свежие дополнения от нового намерения. getIntent в этой ситуации вернет первое, оригинальное намерение, используемое для создания экземпляра этого действия

http://developer.android.com/reference/android/app/Activity.html#onNewIntent(android.content.Intent)

PS Пример:

public class MyActivity extends Activity {

...

@Override
protected void onNewIntent(final Intent intent) {
    super.onNewIntent(intent);
    boolean packChanged = intent.getBooleanExtra(StartActivity.CHANGE_PACK, false);
}

}

  • 0
    режим запуска - Android: launchMode = "singleInstance"
  • 0
    Это означает, что для startActivity (намерения) не создается новый экземпляр вашей активности, и поэтому getIntent всегда будет возвращать вам старое намерение. Попробуйте переопределить метод onNewIntent, как я предложил, и получите там ваше дополнительное логическое значение
Показать ещё 1 комментарий
1

У меня также была эта проблема, и я не смог ее решить. Я закончил тем, что использовал следующий хак:

Intent intent = new Intent(getApplicationContext(), TabsActivity.class);
intent.putExtra(CHANGE_PACK, Boolean.toString(changePack));
startActivity(intent);

а потом

boolean packChanged = Boolean.parseBoolean(getIntent().getStringExtra(StartActivity.CHANGE_PACK));

Хакки, но это работает.

0

Ваш код кажется прекрасным. Единственное место, где вы управляете переменной CHANGE_PACK. Попытайтесь использовать его вместе с именем класса (с момента его объявления Static). Используйте intent.putExtra(StartActivity.CHANGE_PACK, changePack); ,

  • 0
    Я вызываю TabsActivity из StartActivity, поэтому нет необходимости упоминать имя класса, поскольку переменная - это тот же класс.
0

попробуйте использовать это

boolean packChanged;

Bundle extra=getIntent().getExtras();
    if(extra!=null){
        packChanged=extra.getBoolean("enter your key which u have used in StartActivity");

    }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню