我在活动的onpause()方法中传递数据时遇到麻烦。当用户点击一个活动中的按钮时,第二个活动开始。在第一个活动的onPasue方法中我想传递一些数据到其他activity.i使用intent.putExtra()来保存onpause()中的数据。在第二个活动中我使用bundle.getString()来检索data.below是我的代码
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编程的新手。我希望我能够清楚地解释问题
答案 0 :(得分:0)
这是因为您的第二个Activity
是在第一个Activity
来电onPause()
之前创建的。
解决方案:将您的额外内容放入onClick()
回调中。换句话说(正如其他答案所示),您需要在使用Intent
致电startActivity()
之前将数据附加到Intent
。
在第一个
Activity
的{{1}}方法中,我想传递一些数据 其他onPause()
完全没有必要这样做是因为您的第一个Activity
保证在您的第二个Activity
变为可见时立即致电onPause()
。因此,您现在已经知道您的第一个Activity
已拨打Activity
。
有关详细信息,请参阅活动生命周期的official docs。
答案 1 :(得分:0)
在开始新活动之前,您应该向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();
}
}
答案 2 :(得分:0)
第一次没有工作,因为当您致电startActivity
时,额外费用尚未设置。活动#2在调用onPause
之前开始。
这是第二次工作,因为您将意图变量设为实例变量,并且在finish()
调用后您没有调用startActivity()
。这使您的第一个活动实例保持活力。第二次启动活动#2时,意图实例已经存在,并且已经有了额外的内容。
解决方案:在调用startActivity()
之前,您应该加权,并且它会正常工作。
关于这一切如何在Android Docs page
上运作,有一个很好的7步解释答案 3 :(得分:0)
onPause方法并不意味着您的Activity正在完成,只是它正在暂停。例如,如果用户按下后退按钮,它将暂停,但不会完成活动。更好地查看活动生命周期文档
并且还会看到此http://developer.android.com/reference/android/app/Activity.html#finish%28%29