繁体   English   中英

在onPause中的活动之间传递数据

[英]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

在第一个ActivityonPause()方法中,我想将一些数据传递给其他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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM