学而实习之 不亦乐乎

Android:Activity 传递数据

2021-09-30 15:24:07

一、向下一个活动传递数据

Intent中提供了一系列的putExtra()的方法重载,可以把我们所要传递到下一个活动的的数据暂时保存在Intent。然后在下一个活动页面中通过Intent中提供的方法再取出来就可以了。

如,在 FirstActivity 中把数据保存在 Intent 中,代码如下:

button1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        String data = "你好,活动二";
        Intent intent = new Intent(FirstActivity.this,SencondActivity.class);
        //intent提供一系列的putExtra()方法重载
        //第一个参数是键,方便目标活动接收时取值,第二个参数才是真正传递的数据。
        intent.putExtra("extra_data",data);
        startActivity(intent);
    }
});

在 SencondActivity 中将 Intent 中保存的数据取出,代码如下:

public class SencondActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sencond);
        Intent intent = getIntent();
        String data = intent.getStringExtra("extra_data");
    }
}

二、返回数据给上一个活动

如果想在下一个活动传递数据到上一个活动,我们可以在第一个活动中使用 startActivityForResult() 方法来启动第二个活动,startActivityForResult() 方法有两个参数,第一个参数是 intent,第二个参数是请求码,用于在之后的回调中判断数据的来源。

如,在 FirstActivity 中使用 startActivityForResult() 方法来启动 SencondActivity,并重载 onActivityResult() 方法,在 SencondActivity 被销毁后,会回调上一个活动的 onActivityResult() 方法,我们可以在这里获取返回的数据。 代码如下:

button1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

        Intent intent = new Intent(FirstActivity.this,SencondActivity.class);
        startActivityForResult(intent, 1);
    }
});

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {
        case 1:
            if (resultCode == RESULT_OK) {
                String returnedData = data.getStringExtra("data_return");
                Log.d("FirstActivity", returnedData);
            }
            break;
        default:
    }
}

在 SencondActivity 返回数据,通过调setResult()方法向上一个活动返回数据; setResult() 方法有两个参数,参数一为结果码,一般只使用 RESULT_OK 或者 RESULT_CANCELED,参数二为 intent ,用于保存传递的数据。代码如下:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.second_layout);
    Button button2 = (Button) findViewById(R.id.button_2);
    button2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent();
            intent.putExtra("data_return", "Hello FirstActivity");
            setResult(RESULT_OK, intent);
            finish();
        }
    });
}