基于Bundle的消息传递

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标题}}}

你可能感兴趣的:(android,Bundle)