[英]Passing data between activities in onPause
我在通过活动的onpause()方法传递数据时遇到麻烦。当用户在一个活动中单击按钮时,第二个活动开始。在第一个活动的onPasue方法中,我想将一些数据传递给其他活动。我使用intent.putExtra()将数据保存在onpause()中。在第二个活动中,我使用bundle.getString()检索数据。以下是我的代码
public class FirstActivity extends Activity {
Intent intent;
Button b;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tola_calculation);
b = (Button) findViewById(R.id.button);
intent = new Intent(Tola_calculation.this, Kaat_calculation.class);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(intent);
}
});
}
@Override
public void onPause() {
super.onPause();
intent.putExtra("key", "i am value");
}}
和
public class secondActivity extends Activity {
int value;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_kaat_calculation);
Bundle extras=new Bundle();
Intent intent=getIntent();
extras=intent.getExtras();
if (extras!=null) {
String value = extras.getString("key");
Toast.makeText(Kaat_calculation.this,value,Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(Kaat_calculation.this,"null problem",Toast.LENGTH_SHORT).show();
}
}}
问题出在第二个活动中intent.getExtras()第一次返回null。我按返回按钮第一个活动恢复。然后我再次单击以转到第二个活动。这次检索到数据并且intent.getextras()不返回null.can有人解释这个奇怪的行为。或者我正在做一些奇怪的事情,因为我是android编程的新手。我希望我能够清楚地解释问题
发生这种情况是因为您的第二个Activity
是在第一个Activity
调用onPause()
之前创建的。
解决方案:将您的多余内容放入onClick()
回调中。 换句话说(如其他答案所建议的那样),您需要在使用Intent
调用startActivity()
之前将数据附加到Intent
。
在第一个
Activity
的onPause()
方法中,我想将一些数据传递给其他Activity
绝对没有必要这样做,因为保证您的第一个Activity
在第二个Activity
可见后立即调用onPause()
。 因此,您现在已经知道您的第一个Activity
已调用onPause()
。
有关更多详细信息,请参阅有关活动生命周期的官方文档 。
在开始新活动之前,应将数据添加到Intent。 所以这行
intent.putExtra("key", "i am value");
应该先走
startActivity(intent);
总而言之,正确的代码
public class FirstActivity extends Activity {
Intent intent;
Button b;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tola_calculation);
b = (Button) findViewById(R.id.button);
intent = new Intent(Tola_calculation.this, Kaat_calculation.class);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
intent.putExtra("key", "i am value");
startActivity(intent);
}
});
}
@Override
public void onPause() {
super.onPause();
}
}
第一次无法使用,是因为当您调用startActivity
,尚未设置其他功能。 活动#2在调用onPause
之前开始。
这是第二次工作,因为您将intent变量设为实例变量 ,并且没有在startActivity()
调用之后调用finish()
。 这使您的第一个活动实例保持活动状态。 第二次启动活动#2时,意图实例已经存在,并且它已经包含了额外的内容。
解决方案:您应该在调用startActivity()
之前放一些额外的权限,它将正常工作。
关于这一切如何在Android Docs页面上的工作,有7个很好的解释
onPause方法并不意味着您的活动正在结束,而仅仅是暂停。 例如,如果用户按下后退按钮,它将暂停但不结束活动。 最好查看活动生命周期文档
并参阅此http://developer.android.com/reference/android/app/Activity.html#finish%28%29
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.