基于Bundle的消息传递

来源:互联网 发布:淘宝产品拍摄相机选择 编辑:程序博客网 时间:2024/05/28 06:07

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