欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android 用Intent实现活动之间数据的传递

程序员文章站 2022-06-01 13:36:24
...

好了,大家,基本最最基本的通过一个Intent启动一个活动大家都懂了,那我们学一下,那个那个,就是Intent之间数据的传递。

先看看当前活动向下一个活动传递数据:

这里用到一个putExtra()方法,我们呢,在menu里再加一个选项。

case R.id.chuandi_hw:
    String hw = "hello world";
    Intent intent4 = new Intent(FirstActivity.this,ThirdActivity.class);
    intent4.putExtra("hw",hw);
    startActivity(intent4);
    break;

直接跳转到ThirdActivity并向这个活动发送一个字符串,putExtra方法有两个参数,第一个是内容的键,第二个是真正的内容。
活动三接收数据就这样:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.third_layout);
    Intent intent = getIntent();
    String data = intent.getStringExtra("hw");
    Log.d("ThirdActivity",data);
}

这里,用getIntent方法得到启动ThirdActivity活动的Intent,然后,通过getStringExtra和键值得到传递过来的数据,这里传过来的是String,如果传过来的是整形,就用getIntExtra,如果传过来的是boolean,酒桶getBooleanExtra方法得到,以此类推。

再看一看给上一个活动返回数据:

既然学会了怎么向下一个活动发送数据,我们在学一学下一个活动向上一个活动返回数据,向下一个活动发送数据使用的方法是putExtra,我们向上一个活动返回数据用的方法是startActivityForResult(),这个方法有两个参数,第一个还是Intent,第二个参数是请求码,虽然我不知道请求码是什么,但书上说请求码只要是一个唯一值就行了。接下来就是修改ThirdActivity的值就行了。

Button but = (Button) findViewById(R.id.button_3);
but.setOnClickListener(new View.OnClickListener(){
    @Override
    public void onClick (View v){
        Intent intent = new Intent();
        intent.putExtra("data","hello ***");
        setResult(RESULT_OK,intent);
        finish();
    }
});

作者说这个setResult()方法很重要,两个参数,第一个参数是用来返回数据时传入的处理结果,易班只是用RESULT_OK和RESULT_CANCELED两个值,第二个参数则是把带有数据的Intent传回去,然后调用finish()方法来销毁当前活动。
本例子onActivityResult()方法重写如下:

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

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

(解释一下请求码(requestCode):其实请求码对应的还有一个是结果码,用来标识这个活动是被那个按钮启动起来的,从而执行相应的业务逻辑。结果码也是,因为需要返回值的时候启动的是用startActivityForResult启动的,所以下一个活动关闭时会自动回调上一个互动的onActivityResult方法,所以结果码是用来判断返回值(requestCode)是哪个活动返回回来的,从而执行响应的逻辑。)

这里还有一个问题,我们在ThirdActivity里面button写成了关闭活动,但是如果我们用返回的方式来关闭这个活动返回上一个活动,这个返回值就不能传给上一个活动,所以我们在ThirdActivity里面重写一下onBackPressed方法,来解决这个问题。

@Override
public void onBackPressed() {
    Intent intent = new Intent();
    intent.putExtra("data","exit by back");
    setResult(RESULT_OK,intent);
    finish();
    //super.onBackPressed();

}

这样,当用户点击返回键时就执行onBackPressed方法了。