将数据从活动传递到其他[不工作]

时间:2012-06-20 07:25:06

标签: android android-intent

从我的StartActivity类开始,我正在调用另一个使用intent的活动。

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()方法中执行此操作。

5 个答案:

答案 0 :(得分:3)

尝试在onCreate中运行getIntent().getBooleanExtra(...)。或者覆盖protected void onNewIntent(Intent intent)并从该意图对象中检索您的布尔值。

答案 1 :(得分:3)

检查清单中如何声明TabsActivity android:launchMode。 如果是singleTopsingleTask,您应该在TabsActivity中使用onNewIntent()(而不是onResume)从新意图中获取新的额外内容。在那种情况下,getIntent将返回用于创建此Activity的实例的第一个原始意图

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

P.S。例如:

public class MyActivity extends Activity {

...

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

}

答案 2 :(得分:1)

我也遇到了这个问题,并且无法很好地解决问题。我最终使用了以下hack:

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));

Hacky,但它确实有效。

答案 3 :(得分:0)

您的代码似乎很好。您处理CHANGE_PACK变量的唯一方式。尝试将它与类名一起使用(因为它声明为Static)。使用intent.putExtra(StartActivity.CHANGE_PACK, changePack);

答案 4 :(得分:0)

尝试使用此

boolean packChanged;

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

    }