上次我们讲了如何实现页面跳转,今天我们来实现页面跳转与传值:
在Android应用程序中很少会只有一个Activity对象,如何在多个Activity之间进行跳转,而且能够互相传值是一个很基本的要求。
本次我们就来讲一下,Android中页面跳转时实现传值的几种方式:
比较简单的页面跳转由A页面跳转到B页面:
Intent intent=new Intent(A.this,B.class);
startActivity(intent);
1.用Intent传递普通值到一个页面的方法:
public void testOne(View view){
Intent intent=new Intent(A.this,B.class);
//窗体传值
intent.putExtra("stuName", "张三");
intent.putExtra("stuAge", 20);
intent.putExtra("isMerry", false);
intent.putExtra("stuHobby", new String[]{"篮球","羽毛球","足球"});
ArrayList<String> list=new ArrayList<String>();
list.add("北京");
list.add("上海");
list.add("珠海");
intent.putStringArrayListExtra("stuCitys", list);
startActivity(intent);
}
在另一个页面接收值:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second__one);
//从Intent中取出传递过来的数据
Intent intent=getIntent();
//取出普通数据
String name=intent.getStringExtra("stuName");
int age=intent.getIntExtra("stuAge", 0);
boolean isMerry=intent.getBooleanExtra("isMerry", false);
//取出数组数据
String[] hobbys=intent.getStringArrayExtra("stuHobby");
String hobby=Arrays.toString(hobbys);
//取出ArrayList集合数据
ArrayList<String> citys=intent.getStringArrayListExtra("stuCitys");
String city=Arrays.toString(citys.toArray());
showText=(TextView)findViewById(R.id.showText);
String str="姓名:"+name+",年龄:"+age+"\n" +
"婚否:"+isMerry+"\n" +
"爱好:"+hobby+"\n" +
"城市:"+city;
showText.setText(str);
}
2.使用Bundle传递数据
public void testTwo(View view){
Intent intent=new Intent(A.this,B.class);
//构建Bundle对象
Bundle bundle=new Bundle();
bundle.putString("stuName", "贪睡者");
bundle.putInt("stuAge", 23);
bundle.putStringArray("stuHobby", new String[]{"篮球","足球"});
ArrayList<String> list=new ArrayList<String>();
list.add("北京");
list.add("上海");
list.add("珠海");
bundle.putStringArrayList("stuCity", list);
//将封装数据的Bundle作为参数发送过去
intent.putExtra("myData", bundle);
startActivity(intent);
}
在A页面上是以Bundle封装了对象,自然在B页面也是以Bundle的方式来解开封装的数据。主要通过"getIntent().getExtras()"方法来获取Bundle,然后再从Bundle中获取数据。 也可以通过" this.getIntent().getStringExtra("Name");"方法直接从Intent中获取数据。
从Bundle获取数据的代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second__two);
//取出Bundle对象
Intent intent=getIntent();
Bundle bundle=intent.getBundleExtra("myData");
//取出普通数据
String name=bundle.getString("stuName");
int age=bundle.getInt("stuAge");
//取出复杂数据
String[] hobbys=bundle.getStringArray("stuHobby");
ArrayList list=bundle.getStringArrayList("stuCity");
String hobby=Arrays.toString(hobbys);//[xx,xxx,xxx]
if(hobby!=null&&hobby.length()>0)
hobby=hobby.substring(1,hobby.length()-1);
String city=Arrays.toString(list.toArray());
if(city!=null&&city.length()>0)
city=city.substring(1,city.length()-1);
showText=(TextView)findViewById(R.id.showText);
String str="姓名:"+name+",年龄:"+age+"\n" +
"爱好:"+hobby+"\n" +
"城市:"+city;
showText.setText(str);
}