Fork me on GitHub

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()实例,传入ContextClass类型的参数

//对应MainActivity.this 被启动的Activity的类定义 TheAty.class

Intent i = new Intent(MainActivity.this,TheAty.class);

   

// //通过Intent对象,调用putExtra()方法,传参

// //这里传入StringString类型的参数,实际上就是键值对

// 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()实例,传入ContextClass类型的参数

//对应MainActivity.this 被启动的Activity的类定义 TheAty.class

Intent i = new Intent(MainActivity.this,TheAty.class);

   

// //通过Intent对象,调用putExtra()方法,传参

// //这里传入StringString类型的参数,实际上就是键值对

// 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  阅读(234)  评论(0编辑  收藏  举报

导航