Activity两个启动方法的区别

原创
2012/09/19 11:22
阅读数 464

假设有俩个布局界面,第一个是要获取信息Info的定义为MainActivity,第二个是提供需要的信息的定义为SecondActivity,信息格式定义为Info

(1)用startActivity(Intent intent)函数启动

        用这种方式启动,需把SecondActivity设置为程序的入口布局界面,输入信息后用下面代码把信息传递到MainActivity,然后SecondActivity关闭;

Info info =new Info(name.getText().toString(),age.getText().toString());
	        		String key1 = new String("info");
	        		String key2 = new String("people");
	        		Bundle data = new Bundle();
	        		data.putSerializable(key2, info);
	        		data.putSerializable(key1, info);
	        		
	        		Intent intent = new Intent(SecondActivity.this,MainActivity.class);
	        		intent.putExtras(data);
	        		startActivity(intent);finish();

        MainActivity启动后,用下面的代码获取信息并显示

Intent intent = getIntent();
        Bundle data = intent.getExtras();
        
        Info info =(Info)data.getSerializable("people");
        name.setText(info.getName());
        age.setText(info.getAge());

        需要指明是,Info必须实现Serializable接口才可以序列化,Info不需要实现任何Serializable接口方法,只需要声明实现接口,就可以进行序列化;data.putSerializable可以把多个序列化的元素插入到data中,他们用key区分。

(2)用startActivityForResult(int requestCode,int resultCode,Intent intent)函数启动

        用这种方式启动,需把MainActivity设置为程序的入口布局界面,需要时(如按钮)用下面代码启动SecondActivity,SecondActivity在关闭时返回数据:

commit.setOnClickListener(new OnClickListener()
        {
        	@Override
        	public void onClick(View source)
        	{
        		Intent intent = new Intent(MainActivity.this,SecondActivity.class);
        		startActivityForResult(intent,0);        		
        	}
        });

        SecondActivity启动后,用下面的代码获取信息返回给MainActivity

Info info =new Info(name.getText().toString(),age.getText().toString());
            		String key = new String("info");
            		Bundle data = new Bundle();
            		data.putSerializable(key, info);
            		Intent intent = getIntent();//Intent intentx = new Intent();也可以
            		intent.putExtras(data);
            		SecondActivity.this.setResult(0, intent);
            		SecondActivity.this.finish();

        这里留一个疑问,两个布局之间的requestCode是怎么传递和识别的?

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
1 收藏
0
分享
返回顶部
顶部