Activity基本单元、startActivityForResult方法的使用

         Android四大组件分别是Activity、Service、Broadcast Receiver和Content Provider。其中Activity是最基本也是最重要的组件。在Android系统中提供了用户界面。

        一个Android应用通常由多个Activity组成,多个Activity组成了一个Activity栈,当前活动的Activity位于栈顶。每个Activity都由Android系统来控制它的生命周期。

        

创建Activity一般分为以下几步:

        step 1、继承Activity类。(或者是ListActivity、MapActivity)

        step 2、重写onCreate方法,在方法中调用setContentView来展示要显示的视图布局(当然,像是ListActivity有自己的默认布局,可以不调用这个方法)

        step 3、调用findViewById方法,实例化各个组件

        step 4、在清单文件中声明各个Activity类


两个Activity之间的切换:

        使用startActivity方法或者是startActivityForResult方法,这两个方法中传递的参数是Intent组件。

        举个例子:点击按键时,从第一个Activity跳转到第二个Activity。

b1.setOnClickListener(new OnClickListener() {
	@Override
	public void onClick(View v) {
		// 显示方式声明Intent,直接启动SecondActivity
<span style="white-space:pre">	</span>        Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
        <span style="white-space:pre">	</span>startActivity(intent);
	}
});


两个Activity之间传递数据信息:

        这时需要使用Bundle对象,将要传递的对象封装在Bundle对象里,Bundle类似于Map容器,是采用键值对的方法存储信息的。

        当信息添加完毕之后,再使用Intent对象将信息传递出去。

        举个例子,在第一个Activity中添加数据:

b1.setOnClickListener(new OnClickListener() {
	public void onClick(View v) {
		 String nameString = myEditText.getText().toString();
		 //定义一个Bundle对象data
	         Bundle data = new Bundle();
	         //在data中以Key-Value的方法导入信息,这里键是name,值是nameString字符串
	         data.putString("name", nameString);
	         //创建一个Intent对象intent,声明要传递的两个Activity类
	         Intent intent = new Intent(MainActivity.this,ResultActivity.class);
	         //在intent对象中将Bundle对象添加进去
	         intent.putExtras(data);
	         //启动intent对象
	         startActivity(intent);
	}
});

        在第二个Activity中导出数据:

Intent intent = getIntent();
Bundle b = intent.getExtras();
String getNameString = b.getString("name");


关于 startActivityForResurlt方法和startActivity方法的区别

        使用startActivity方法,是简单的直接跳转,若是想跳回当前页面,则必须再使用一次startActivity( )。

        startActivityForResurlt方法是一个有返回值的启动新Activity的方法。假若从FirstActivity跳转到下一个SecondActivity,而当SecondActivity调用了finish()方法以后,程序会自动跳转回FirstActivity,并调用前一个FirstActivity中的onActivityResult( )方法。

        使用startActivityForResult获取返回值的Activity中,要重写onActivityResult 方法,用来获取从第二个Activity中传递回来的返回值。

        在FirstActivity中重写startActivityForResult(Intent intent, Int requestCode)和onActivityResult(int requestCode, int resultCode, Intent intent),两个方法中的参数要匹配。

        在第二个方法中重写setResut(int resultCode, Intent intent)方法,写入要传回的数据信息。这三个方法中的请求码、结果码的值都要相匹配才行。

        举个例子,先在第一个Activity中重写两个方法:

b1.setOnClickListener(new OnClickListener() {
	@Override
	public void onClick(View v) {
		username = (EditText)findViewById(R.id.username);
	        password = (EditText)findViewById(R.id.password);
       
	        String str_username = username.getText().toString();
		        
	        Bundle b = new Bundle();
	        b.putString("username", str_username);
		        
	        Intent intent = new Intent(MainActivity.this,NextActivity.class);
	        intent.putExtras(b);
	        
		startActivityForResult(intent, 1);
	}
});
        定义onActivityResult方法:

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		switch (resultCode) { //resultCode为回传的标记
			case 0:
				Bundle b=data.getExtras(); 
				String str=b.getString("str1");
				break;
		default:
			break;
		}
    }

        定义第二个Activity中的setResult方法,需要注意的是,虽然setResult的调用在finish之前,但是当前Activity正在执行,还没有调用finish结束它之前,只是让setResult处于就绪状态,结果并不会立即回传给前一个Activity,只有当前Activity调用了finish方法而消亡的时候,结果才会回传给onActivityResult去处理。

b2.setOnClickListener(new OnClickListener() {
	@Override
	public void onClick(View v) {
		Intent intent = getIntent();
		intent.putExtra("abc", "test");
		NextActivity.this.setResult(0, intent);
		NextActivity.this.finish();
	}
});







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值