您的位置:首页 > 其它

基于Bundle的消息传递

2016-02-29 21:04 218 查看
Buddle是一种数据结构,类似于哈希表,是一种键值对,但其值是规定的类型,不能是任意的对象类型,常用类型都是允许的。Buddle的部分方法:

clear():清除此bundle映射中所有保存的数据。

clone():克隆当前bundle中的数据。

containsKey(String key):返回指定key的值。

getString(String key):返回指定key的字符。

hasFileDescriptors():指示是否包含任何捆绑打包文件描述符。

isEmpty():如果这个捆绑映射为空则返回true。

putString(String key, String value):插入一个给定key的字符串值。

remove(String key):移除指定key的值。

putExtras():取出相应buddle中的数据。

public class BuddleDemo_MainActivity extends Activity implements View.OnClickListener {
EditText etName;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
etName = (EditText) findViewById(R.id.etname);
Button btn = (Button) findViewById(R.id.btn);//将新建的Button实例和布局中建立的Button对应
btn.setOnClickListener(this);//侦听按钮被单击的动作
}
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn:
String info = etName.getText().toString();//得到用户输入的内容
Bundle bundle = new Bundle();//新建Buddle
//保存输入的信息
bundle.putString("name", info);//将用户输入的内容存放在name字段中
Intent intent=new Intent(BuddleDemo_MainActivity.this,AnotherActivity.class);//跳转
intent.putExtras(bundle);//取出buddle信息
finish();//关闭此Activity
startActivity(intent);//确定新的Activity
default:
break;}}}


如下代码是在新的Activity中,取出其中Buddle存储的信息并显示:

public class AnotherActivity extends Activity {
private TextView etName;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.another);//布局文件
etName=(TextView)findViewById(R.id.textname);//将新建的EditText实例和布局中建立的EditText对应
Bundle b=getIntent().getExtras();//从本Intent中对应的Buddle中取出数据
String info=b.getString("name");//得到对应字段的内容
etName.setText("您的姓名:"+info);//显示对应的用户输入的信息
}
}


通过Buddle传递多参数:

Buddle是一个类似键值对的数据结构,她不仅可以传递单个键值对,也可以传递多个键值对

public class EditTextDemo_Activity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);//调用main.xml布局
Button mybutton = (Button) findViewById(R.id.mybutton);//在main.xml中已经定义好
mybutton.setOnClickListener(ifclick);//侦听按钮是否被点击
}
private Button.OnClickListener ifclick = new Button.OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent();//新建一个Intent
Bundle myBundleForName1 = new Bundle();//新建一个Bundle用于传递数据
myBundleForName1.putString("store", "你好");//将字符串变量存储在字段store中。
intent.putExtras (myBundleForName1);//将第一个Buddle中的键值对存储在Intent实例中
Bundle myBundleForName2 = new Bundle();//新建一个Bundle用于传递变量
myBundleForName2.putString("mem", "欢迎测试Bundle");//将字符串变量存储在字段mem中。
intent.putExtras (myBundleForName2);//将第二个Buddle中的键值对也存储在Intent实例中,可见Intent实例中可以存储多个键值对
intent.setClass(EditTextDemo_Activity.this, EditTextActivity.class);//通过intent打开另外的Activity
startActivity(intent);//从当前的主Activity跳转到EditTextActivity中}}}


目标Activity:

public class EditTextActivity extends Activity{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle mybundle = this.getIntent().getExtras();//得到Bundle中存储的信息
String mybundlestring1 = mybundle.getString("store");//得到Bundle中存储的store字段信息
String mybundlestring2 = mybundle.getString("mem");//得到Bundle中存储的mem字段信息
setTitle(mybundlestring1+mybundlestring2);//将存储的两个Bundle信息拼接起来作为Activity的标题
setContentView(R.layout.edittext);//布局
EditText my = (EditText) findViewById(R.id.myedittext);//将EditText实例和在布局中的相应widget组件联系起来
CharSequence old = my.getText();//得到该组件的设定信息
my.setText("喂!" + old);//注意字符串拼接方法
Button mybutton = (Button) findViewById(R.id.mybutton2);//在main.xml中已经定义好
mybutton.setOnClickListener(clickornot);//侦听按钮是否被点击
}
private Button.OnClickListener clickornot = new Button.OnClickListener() {
public void onClick(View v) {
EditText mytext = (EditText)findViewById(R.id.myedittext);//myedittext在edittext.xml中有定义
CharSequence newvalue = mytext.getText();//得到用户输入的内容
setTitle(newvalue);//设定为Activity标题}}}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: