Intent-数据传递

来源:互联网 发布:中国产业经济数据库 编辑:程序博客网 时间:2024/04/30 01:35
向下一个活动传递数据
再启动活动时传递数据的思路很简单,Intent中提供了一系列putExtra()方法的重载,可以把我们想要传递的数据暂存在Intent中,启动了另一个活动后,只需要把这些数据再从Intent中取出就可以。
例:

button1.setOnClickListener(new OnClickListener() {

    @Override

    public void onClick(View v) {

        String data = "Hello SecondActivity";

        Intent intent = new Intent(FirstActivity.this, SecondActivity.class);

        intent.putExtra("extra_data", data);

        startActivity(intent);

    }

});

protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_NO_TITLE);

        setContentView(R.layout.second_layout);

        Intent intent = getIntent();

        String data = intent.getStringExtra("extra_data");

        Log.d("SecondActivity", data);

    }

首先可以通过getIntent()方法获取到用于启动该Activity的Intent,然后调用getStringExtra()方法,传入相应的键值,就可以得到传递的数据了。
返回数据给上一个活动
Activity中有一个startActivityForResult()方法也是用于启动活动的,但这个方法期望在活动销毁 时候能够返回一个结果给上一个活动。
startActivityForResult()方法接受两个参数,第一个参数还是Intent,第二个参数是请求码,用于在之后回调中判断数据的来源
例:
返回:
活动1中

button1.setOnClickListener(new OnClickListener() {

    @Override

    public void onClick(View v) {

        Intent intent = new Intent(FirstActivity.this, SecondActivity.class);

        startActivityForResult(intent, 1);

    }

});

这里使用了startActivityForResult()方法来启动SecondActivity,请求码是一个唯一的值。
活动2中

Button button2 = (Button) findViewById(R.id.button_2);

        button2.setOnClickListener(new OnClickListener() {

            @Override

            public void onClick(View v) {

                Intent intent = new Intent();

                intent.putExtra("data_return", "Hello FirstActivity");

                setResult(RESULT_OK, intent);

                finish();

            }

        });

我们可以看到这个构建了一个Intent,只不过这个Intent仅仅是用于传递数据而已,它没有指定任何“意图”,紧接着把要传递的数据存放在Intent中,然后调用了setResult()方法。这个方法非常重要,是专门用于向上一个活动返回数据的。setResult()方法接收两个参数,第一个参数用于向上一个活动返回处理结果,一般只使用RESULT_OKRESULT_CANCELED这两个值,第二个参数则是把带有数据的Intent传递回去,然后调用了finish()方法来销毁当前活动。
由于我们是使用startActivityForResult()方法来启动SecondActivity的,SecondActivity被销毁之后会回调上一个活动的onActivityResult()方法,因此我们需要在FirstActivity中重写这个方法来得到返回的数据

@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:

    }

}

onActivityResult()方法带有三个参数,第一个参数requestCode,即我们在启动活动时传入的请求码。第二个参数resultCode,即我们在返回数据时传入的处理结果。第三个参数data,即携带着返回数据的Intent

如果用户是通过按下Back键回到FirstActivity,可重写onBackPressed()方法来解决这个问题

@Override

public void onBackPressed() {

    Intent intent = new Intent();

    intent.putExtra("data_return", "Hello FirstActivity");

    setResult(RESULT_OK, intent);

    finish();

}


--------------------------------------------------------------------------------------------------------------------------------------

android 开发交流群:264706196

0 0
原创粉丝点击