为Intent附加数据的两种写法

第一种写法,用于批量添加数据到Intent:

Intent intent = new Intent();
Bundle bundle = new Bundle();
bundle.putString("name","张三");
intent.putExtras(bundle);

putExtras方法是为意图追加额外的数据,意图原来已经具有的数据不会丢失,但key同名的数据会被替换。

接收该种方法传递的附加数据的方法是:

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

第二种写法:

这种写法的作用等价于上面的写法,只不过这种写法是把数据一个一个地添加进Intent,这种写法使用起来比较方便,而且只需要编写少量的代码。

Intent intent = new Intent();
intent.putExtra("name","张三");

接收该种方法传递的附加数据的方法是:

Intent intent = this.getIntent();
String name = intent.getStringExtra("name");

Bundle类的作用

Bundle类用作携带数据,它类似于Map,用于存放key-value键值对形式的值。相对于Map,它提供了各种常用类型的putXxx()/getXxx()方法,如:putString()/getString()和putInt()/getInt(),putXxx()用于往Bundle对象放入数据,getXxx()方法用于从Bundle对象里获取数据。


生成[0,100]随机整数:

Random random = new Random();
random.nextInt(101);

nextInt方法是左闭右开的。


byte转换成十进制:每一个字节都是8位的二进制,b&0xff


在TextView的左边添加图片,可以在布局文件中用:

android:drawableLeft="@android:drawable/star_on"

添加ListView中每个textView的点击响应事件用setOnItemClickListener()方法:

lv.setOnItemClickListener(new OnItemClickListener(){});

关闭当前Activity用finish()方法。


得到新打开Activity关闭后返回的数据

如果想在Activity中得到新打开Activity关闭后返回的数据,需要使用系统提供的startActivityForResult(Intent intent,int requestCode)方法打开新的Activity,新的Activity关闭后向前面的Activity传回数据,为了得到传回的数据,必须在前面的Activity中重写onActivityResult(int requestCode,int resultCode,Intent data)方法。

当新Activity关闭后,新Activity返回的数据通过Intent进行传递,Android平台会调用前面Activity的onActivityResult()方法,把存放了返回数据的Intent作为第三个输入参数传入,在onActivityResult()方法中使用第三个输入参数可以取出新Activity返回的数据。


使用startActivityForResult(Intent intent,int requestCode)方法打开新的Activity,新Activity关闭前需要向前面的Activity返回数据需要使用系统提供的setResult(int resultCode,Intent data)方法实现。


请求码的作用

使用startActivityForResult(Intent intent,int requestCode)方法打开新的Activity,我们需要为该方法传入一个请求码。请求码的值是根据业务需要由自己设定,用于标识请求来源。例如:一个Activity有两个按钮,点击这两个按钮都会打开同一个Activity,不管是哪个按钮打开新Activity,当这个新Activity关闭后,系统都会调用前面Activity的onActivityResult(int requestCode,int resultCode,Intent data)方法。在onActivityResult()方法中如果需要知道新Activity是由哪个按钮打开的,并且要做出相应的业务处理,可以在打开新Activity时设置不同的请求码,然后在onActivityResult()方法中根据传回请求码的不同而做出不同的处理。


结果码的作用

在一个Activity中,可能会使用startActivityForResult()方法打开多个不同的Activity处理不同的业务,当这些新Activity关闭后,系统都会调用前面Activity的onActivityResult(int requestCode,int resultCode,Intent data)方法。为了知道返回的数据来自于哪个新Activity,在每个新Activity中的setResult(int resultCode,Intent data)方法中设置不同的结果码,然后在前面Activity中的onActivityResult()方法中可以根据结果码的不同而做出不同的业务处理。