StartActivity 和 StartActivityForResult

startActivity 和 startActivityForResult都用来打开另外一个Activity,但是后者添加了更多功能:比如在MainActivity使用startActivityForResult打开了OtherActivity,那么调用OtherActivity的finish() 方法后,会自动调用MainActivity的 onActivityResult() 方法(需要从写),这样就可以做进一步的处理。当然不止在打开activity的时候可以通过intent传递数据,在关闭activity的时候,如果使用的是startActivityForResult,也可通过intent传递数据。我们来看一看实例:

1.startActivityForResult( Intent intent, int requestCode); 有两个参数,第一个参数intent和startActivity() 中作用一样,第二个参数表示请求码,主要是为了表示打开这个Activity的目的,比如说我在一个Activity中有两个按钮,需要打开同一个Activity,当关闭第二个Activity后返回第一个Activity,我需要处理的动作不一样,那么就需要判断requestCode。

比如例子中的:

		btnJump1.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				Intent intent = new Intent();
				intent.setClass(mContext, OtherActivity1.class);
				startActivityForResult(intent, 21);
			}
		});

startActivityForResult( Intent intent, int request Code),第二个参数就是请求码,当关闭被打开Activity之后,这个requestCode会被原样返回到onActivityResult( int requestCode , ...) 的第一个参数。

2. onActivityResult(),当我使用startActivityForResult() 打开OtherActivity后,当我关闭OtherActivity,就会调用前一个Activity的onActivityResult() 方法。这里有3个参数,第一个requestCode 就是第一点讲的 设置的requestCode,第二个参数是在OtherActivity中设置的结果码,第三个参数也是在OtherActivity中设置的要传递的数据。

	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {

		}
	}

3. resultCode 和 Intent data,这两个参数需要在被打开的Activity中设置,比如:

		btnClose.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				String name = mLoginBundle.getString("name");
				String pass = mLoginBundle.getString("pass");
				Intent data = new Intent();
				if(name.equals("xiaoming") && pass.equals("123456")){
					data.putExtra("result", "success");
					setResult(3, data);
				}
				else{
					data.putExtra("result", "failed");
					setResult(3, data);
				}
				finish();
			}
		});

setResult(int  resultCode, Intent data) ,这个方法就是用来返回的两个参数,当然具体的数据需要自己添加。

下面贴一下代码:

1. MainActivity.java

package com.example.demo_startactivityforresult;

import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity {
	private static final String TAG = "MainActivity";
	private Context mContext = this;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		Button btnJump1 = (Button) findViewById(R.id.btn_jumpto_other1);
		Button btnJump2 = (Button) findViewById(R.id.btn_jumpto_other2);
		Button btnJump3 = (Button) findViewById(R.id.btn_jumpto_other3);
		btnJump1.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				Intent intent = new Intent();
				intent.setClass(mContext, OtherActivity1.class);
				startActivityForResult(intent, 21);
			}
		});

		btnJump2.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				Intent intent = new Intent();
				intent.setClass(mContext, OtherActivity2.class);
				startActivityForResult(intent, 22);
			}
		});

		btnJump3.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				Intent intent = new Intent();
				intent.setClass(mContext, OtherActivity3.class);
				Bundle bundle = new Bundle();
				bundle.putString("name", "xiaoming");
				bundle.putString("pass", "123456");
				intent.putExtras(bundle);
				startActivityForResult(intent, 21);
			}
		});
	}

	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		Log.e(TAG, "requestCode:" + requestCode);
		Log.e(TAG, "resultCode:" + resultCode);
		Log.e(TAG, "data:" + data);
		if (requestCode == 21 && resultCode == 3) {
			Intent resultIntent = data;
			String result = data.getStringExtra("result");
			Log.e(TAG, "result:" + result);
		}
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}

2. OtherActivity1.java

package com.example.demo_startactivityforresult;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class OtherActivity1 extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.other1_layout);

		Button btnClose = (Button) findViewById(R.id.btn_close);
		btnClose.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				setResult(1);
				finish();
			}
		});
	}
}

3. OtherActivity2.java

package com.example.demo_startactivityforresult;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class OtherActivity2 extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.other2_layout);

		Button btnClose = (Button) findViewById(R.id.btn_close);
		btnClose.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				setResult(2);
				finish();
			}
		});
	}
}

4. OtherActivity3.java

package com.example.demo_startactivityforresult;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class OtherActivity3 extends Activity {
	private Bundle mLoginBundle;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.other3_layout);
		mLoginBundle = getIntent().getExtras();

		Button btnClose = (Button) findViewById(R.id.btn_close);
		btnClose.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				String name = mLoginBundle.getString("name");
				String pass = mLoginBundle.getString("pass");
				Intent data = new Intent();
				if(name.equals("xiaoming") && pass.equals("123456")){
					data.putExtra("result", "success");
					setResult(3, data);
				}
				else{
					data.putExtra("result", "failed");
					setResult(3, data);
				}
				finish();
			}
		});
	}
}

布局文件就是只有跳转activiyt的按钮,这就就不贴代码了。

下面是效果图:

 
 

时间: 2024-08-08 04:44:16

StartActivity 和 StartActivityForResult的相关文章

Activity间的跳转,startActivity与startActivityForResult

JreduCh04 2016-07-30跳转 (由一个画面跳转到另一个画面)两种方法:Intent中 startActivity.startActivityForResult.后者可设置requestCode(申请码)用于获得返回值,即由一个画面传数据到多个画面(相同的数据),完成不同的功能,此时的requestCode的可通过判断来获得返回值.例:startActivity 在第一个画面中设置一个按钮,按下按钮跳转到第二个画面.lay_out中,相对布局中设置一个Button,id为bt1;

Android四大组件之——Activity的开启:StartActivity()和StartActivityForResult()(图文详解)

            如需转载请在文章开头处注明本博客网址:http://www.cnblogs.com/JohnTsai       联系方式:[email protected]       [Android四大组件学习系列Activity篇]        1.Android四大组件之——Activity(一)定义.状态和后退栈(图文详解) 2.Android四大组件之——Activity的生命周期(图文详解) 3.Android四大组件之——Activity的开启StartActivit

startActivity、 startActivityForResult 、广播的使用

前言 近期忙着跟项目.好久没有写文字了.今天一个群里面的童鞋问到一个关于不同界面间传值的问题,借这个背景,写一段关于" startActivity. startActivityForResult .广播的使用"的文字,希望能对照我还新的新手有所帮助 ①. startActivity. startActivityForResult:  Intent intent; @Override  public void onClick(View v) {   int tag = v.getId()

startActivity与startActivityForResult的使用小结

1.在一个Activity中想要启动进入另一个Activity时,通常我们使用startActivity这个方法来实现,代码如下: 其中MainActivity为源activity,ActivityLifeCycleActivity为目标activity,也就是要进入的那个,也可通过intent传递一些必要的参数. Intent intent = new Intent(MainActivity.this, ActivityLifeCycleActivity.class); startActivi

Android之startActivity、startActivityForResult和setResult详解

[PS:还是以GOOGLE原生的BluetoothChat为例] 1. startActivity与startActivityForResult的区别 startActivity( ) 仅仅是跳转到目标页面,若是想跳回当前页面,则必须再使用一次startActivity( ). startActivityForResult( ) 可以一次性完成这项任务,当程序执行到这段代码的时候,假若从T1Activity跳转到下一个Text2Activity, 而当这个Text2Activity调用了fini

Andorid学习笔记(ADT)-startActivity和startActivityForResult的用法

startActivity的用法 startActivity同时用在Button按钮的onClickListener中 在第一个activity(A)文件中: //写在onClickListener方法中 public void onClick(View v){ Intent intent = new Intent(); //使用Intent类的构造方法创建一个intent对象 intent.setClass(A.this,B.class);//设置intent的意图,表示从A跳转到B star

android开发:startActivityForResult和startActivity比较

以A_Activity跳转到B_Activity为例. 一.startActivity A调用startActivity 跳转到B,再想从B跳转到A,那么B需要调用startActivity或startActivityForResult方法. 二.startActivityForResult A调用startActivityForResult 跳转到B,当B finish掉后,会自动跳转到A,并且回传数据给A. 增加的工作有: 1.B调用setResut(int resultCode, Inte

Android -- startActivityForResult和setResult

startActivityForResult与startActivity的不同之处 startActivity( ) 仅仅是跳转到目标页面,若是想跳回当前页面,则必须再使用一次startActivity( ). startActivityForResult( ) 可以一次性完成这项任务,当程序执行到这段代码的时候,假若从T1Activity跳转到下一个Text2Activity,而当这个Text2Activity调用了finish()方法以后,程序会自动跳转回T1Activity,并调用前一个T

QtAndroid详解(2):startActivity和它的小伙伴们

上一篇,"QtAndroid详解(1):QAndroidJniObject",我们做了好多好多准备工作,目的就是为使用 QtAndroid 名字空间里的 startActivity() 方法调用 Android 系统功能奠定基础.那这次呢,我们就要来研究如何使用 startActivity 方法了. 在我的书<Qt on Android核心编程>中,讲解 JNI ,介绍如何使用 JNI 扩展 Qt 应用时,是通过重写 QtActivity ,为我们的 Activity 加入