Android Intent传值和回传值

来源:互联网 发布:淘宝自助开通账户 编辑:程序博客网 时间:2024/06/05 15:09

为了实现点击某个Actionbar弹出某个Dialog Or AnortherAvtivity进行参数设置,同时设置好的参数还可以返回当前主界面进行处理,此时会想到用Intent的传值问题。那么首先要了解Intent启动一个Activity并进行值传递的过程。之前的博客写过关于Intent启动的方法和简单的传值,这里主要说一下关于Intent传递int数据的问题,Intent传递Int数据可以通过两种方法,一种为数据转换,一般是先传一个String类型,然后String转int,这种方法实现起来在某些场合不太适用,所以有第二种方法,通过Bundle对数据进行封装,然后传递bundle即可。示例如下:

1.数据封装

Intent intent = new Intent();Bundle bundle = new Bundle();bundle.putInt("Time", 5);bundle.putInt("Counts", 16);intent.putExtras(bundle);
2.数据拆包

Bundle b = getIntent().getExtras();int time = b.getInt("Time");int counts = b.getInt("Counts");
这样就实现了通过Bundle封装数据来传递值。

本文主要说一下Intent中除了startActivity()方法外的另一种可以实现回传值的startActivityForResult()方法。这也就是一开始所要实现的方法,这个方法也比较简单,但是要把逻辑理清楚,即通过firstActivity启动nextActivity,然后由nextActivity进行数据处理,封装,再将值返回给firstActivity进行处理。首先,在firstActivity中启动nextActivity,并传入键值对,部分代码如下:

Intent intent = new Intent();intent.putExtra("Time", time);intent.putExtra("Counts", counts);intent.setClass(MainActivity.this, SpinnerC.class);startActivityForResult(intent, 1);//1为requestCode,传值的标志,就像一个商标,表示是这个箱子
然后在nextActivity中进行数据的封装,代码如下:

Intent intent = new Intent();Bundle bundle = new Bundle();bundle.putInt("Time", SampleTimeS);bundle.putInt("Counts", SampleCountsS);intent.putExtras(bundle);setResult(2, intent);//返回值调用函数,其中2为resultCode,返回值的标志finish();//传值结束
最后在firstActivity中接收返回值,此时会重写一个onActivityResult函数,专门用来接收返回值,其中第一个参数即requestCode,第二个为resultCode,最后一个为传回的intent,可以利用前两个参数来判断是否是需要的包传递回来,代码如下:

 protected void onActivityResult(int requestCode, int resultCode, Intent data) {        super.onActivityResult(requestCode, resultCode, data);        if (requestCode == 1 && resultCode == 2){                Bundle b = data.getExtras();                time = b.getInt("Time");                counts = b.getInt("Counts");        }    }
这样就实现了数据的值回传。





0 0