利用Intent传值

来源:互联网 发布:北京淘宝培训一对一 编辑:程序博客网 时间:2024/06/13 08:57

利用Intent传值

转载请注明出处:
http://blog.csdn.net/xiao_spring/article/details/64126155

在之前的博客里,我有写到Intent在Activity的显式和隐式的调用方式。
详情请点击:
Intent(信使)显式与隐式调用

那么,如果我们想要在不同的Activity之间传值,该如何操作呢?
让我们仔细考虑Intent中action和category的概念,当我们在页面A设置Intent的action及category时,其实可以将这两个属性当成要传递的数据。

但我们总不能把想要传递的数据放到这两个属性里吧,别担心,Intent类有专门的方法解决这个问题。

正向传递

我们可以将Intent当做一个桥梁,以此输送数据。

A端代码:

 Intent intent  = new Intent(); intent.setClass(this,SecondActivity.class); intent.putExtra("dataName","从A传递过来的内容"); startActivity(intent);

B端代码:

textView = (TextView) findViewById(R.id.textview);Intent intent = getIntent();String data = intent.getStringExtra("dataName");textView.setText(data);

同样的,如果我们想要传递的数据类型不是字符串类型,Intent类也提供了其他的数据传递方法,这里不加赘述。

另外,如果涉及到三个及三个以上Activity的数据传递,那么我们继续使用上面的方法,步骤如下(以3个Activity间数据的正向传递为例):

  1. 将ActivityA的数据塞入Intent中,传递
  2. 在ActivityB中解析传来的Intent,再次塞入Intent,传递
  3. 在ActivityC中解析传来的Intent,结束

仔细分析上述步骤,如果在步骤2中,没有对所传递的数据进行操作,那么这种传递方式显然十分费事。

我们知道Android是基于Java语言进行开发的,Java中bundle是一种存放字符串和Parcelable类型数据的map类型的容器类,通过存放数据键(key)获取对应的各种类型的值(value),而且必须通过键(key)获取,这样可以解决上述的问题。

实际代码如下:

A端:

 Intent intent  = new Intent(); intent.setClass(this,SecondActivity.class); Bundle bundle = new Bundle(); bundle.putString("dataName","用Bundle从A传递过来的内容"); intent.putExtras(bundle); startActivity(intent);

B端:

  Bundle bundle = this.getIntent().getExtras();  String data = bundle.getString("dataName");

写到这里,大家有没有感觉到利用Bundle传值有一种封装的思想呢?

反向传递

说是反向传递,其实是经历了一次正向传递后的传递,主要涉及到
ActivityB在关闭后如何将数据返回给ActivityA。

A端:

  • 启动代码块
 Intent intent  = new Intent(); intent.setClass(this,SecondActivity.class); Bundle bundle = new Bundle(); bundle.putString("dataName","用Bundle从A传递过来的内容"); intent.putExtras(bundle); startActivityForResult(intent,1);//第二个参数是请求码
  • 回调代码块
 @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        switch (requestCode)        {            case 1:                if(resultCode == RESULT_OK)                {                String str=                      data.getStringExtra("dataReturn");                //数据处理                break;            default:                break;        }        super.onActivityResult(requestCode, resultCode, data);    }

从上述代码可以知道,有数据返回需求的Activity在启动时要使用startActivityForResult方法,且多了一个请求码参数,这个是用来保证正确调用的。

B端

 Intent intentReturn = new Intent(); intentReturn.putExtra("dataReturn", "从B返回的数据"); setResult(RESULT_OK,intentReturn); finish();

这里的setResult方法是专门向上一个Activity反馈的,其中第一个参数(int类型)表明处理结果,第二个参数则将带有数据的Intent返回过去。

完。

0 0
原创粉丝点击