Activity之间传递参数(二)
------siwuxie095
传递数据包
1、传递数据包要用到Bundle,MainActivity.java中:
| package com.siwuxie095.sendargs; 
 import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; 
 public class MainActivity extends AppCompatActivity { 
 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); 
 findViewById(R.id.btnStartAty).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //创建一个new Intent()实例,传入Context和Class类型的参数 //对应MainActivity.this 和 被启动的Activity的类定义 TheAty.class Intent i = new Intent(MainActivity.this,TheAty.class); 
 // //通过Intent对象,调用putExtra()方法,传参 // //这里传入String和String类型的参数,实际上就是键值对 // i.putExtra("data","你好 我是传递的参数"); 
 
 //传递数据包要用到Bundle,通过Bundle存入多种类型数据,传给第二个Activity Bundle b=new Bundle(); //b.putBundle(); 即Bundle也可以嵌入Bundle b.putString("name","Jack"); b.putInt("age",22); //putExtras() 传入Bundle i.putExtras(b); 
 //传入i startActivity(i); } }); } } | 
2、在另一个Activity 即 TheAty.java 中,接收Bundle和设置默认参数
(默认参数也可以被传入的参数覆盖):
| package com.siwuxie095.sendargs; 
 import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.TextView; 
 public class TheAty extends AppCompatActivity { 
 
 private TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_the_aty); 
 //TheAty是通过MainActivity中的Intent启动,直接通过getIntent()方法 //获取与这个Activity相关的Intent Intent i=getIntent(); //在第二个Activity 即TheAty 获取Bundle Bundle data=i.getExtras(); 
 //要访问TextView,先在上面声明 //findViewById()的返回值在编译时只能查看到类型是View,而事实上是TextView类型 //需要强制类型转换 tv= (TextView) findViewById(R.id.tv); 
 // //调用setText()方法设置字符串,这里字符串通过Intent获取 // tv.setText(i.getStringExtra("data")); 
 //用到了String.format() // 假如有一个不存在的数据 如namex // 那么getString()有一个重载函数 可以设置默认值 tv.setText(String.format("name = %s, age = %d, namex = %s",data.getString("name"),data.getInt("age"),data.getString("namex","Mary"))); } } | 
3、运行一览:
 
		
 
		
4、除了通过直接 putExtras(),传入Bundle外,还可以通过putExtra()传:
| package com.siwuxie095.sendargs; 
 import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; 
 public class MainActivity extends AppCompatActivity { 
 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); 
 findViewById(R.id.btnStartAty).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //创建一个new Intent()实例,传入Context和Class类型的参数 //对应MainActivity.this 和 被启动的Activity的类定义 TheAty.class Intent i = new Intent(MainActivity.this,TheAty.class); 
 // //通过Intent对象,调用putExtra()方法,传参 // //这里传入String和String类型的参数,实际上就是键值对 // i.putExtra("data","你好 我是传递的参数"); 
 //传递数据包要用到Bundle,通过Bundle存入多种类型数据,传给第二个Activity Bundle b=new Bundle(); //b.putBundle(); 即Bundle也可以嵌入Bundle b.putString("name","Jack"); b.putInt("age",22); //putExtras() 传入Bundle // i.putExtras(b); //除了通过putExtras()传,还能用下面的putExra() i.putExtra("data",b); 
 //传入i startActivity(i); } }); } } | 
5、获取Bundle时也有所不同:
| package com.siwuxie095.sendargs; 
 import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.TextView; 
 public class TheAty extends AppCompatActivity { 
 
 private TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_the_aty); 
 //TheAty是通过MainActivity中的Intent启动,直接通过getIntent()方法 //获取与这个Activity相关的Intent Intent i=getIntent(); //在第二个Activity 即TheAty 获取Bundle // Bundle data=i.getExtras(); Bundle data=i.getBundleExtra("data"); 
 //要访问TextView,先在上面声明 //findViewById()的返回值在编译时只能查看到类型是View,而事实上是TextView类型 //需要强制类型转换 tv= (TextView) findViewById(R.id.tv); 
 // //调用setText()方法设置字符串,这里字符串通过Intent获取 // tv.setText(i.getStringExtra("data")); 
 //用到了String.format() // 假如有一个不存在的数据 如namex // 那么getString()有一个重载函数 可以设置默认值 tv.setText(String.format("name = %s, age = %d, namex = %s",data.getString("name"),data.getInt("age"),data.getString("namex","Mary"))); } } | 
【made by siwuxie095】
posted on 2017-01-02 01:05 siwuxie095 阅读(246) 评论(0) 收藏 举报

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号