实现从一个Activity跳转到第二个Acitivity,返回结果在第一个Activity中显示。
先给出关键代码:
class MainActivity extends Activity:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bt2 = (Button) findViewById(R.id.button2);
textView = (TextView)findViewById(R.id.textView1);
bt2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Intent intent = new Intent(MainActivity.this,ThridIntent.class);
Bundle bundle = new Bundle();
startActivityForResult(intent,200);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 200 && resultCode == 200){
String string = data.getStringExtra("check");
textView.setText(string);
}
}
class ThridIntent extends Activity:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_thrid_intent);
radioGroup = (RadioGroup)findViewById(R.id.radioGroup1);
//单选按钮改变事件
radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup arg0, int arg1) {
Intent intent = getIntent();
RadioButton radioButton=(RadioButton) findViewById(radioGroup.getCheckedRadioButtonId());
String string = (String)radioButton.getText();
intent.putExtra("check", string);
setResult(200,intent);
finish();
}
});
}
代码说明:
启动、关闭Activity:
Activity启动其他Activity有如下两个方法:
startActivity(Intent intent) :启动其他Activity。
startActivityForResult(Intent intent,int requestCode):以指定的请求码requestCode启动Activity,而且程序会等到新启动Activity的结果(通过重写onActivityResult(..))方法来获取。
关闭Activity:
finish():结束当前Activity。
finishActivity(int requestCode):结束以startActivityForResult(Intent intent,int requestCode)方法启动的Activity。
使用Bundle在Activity之间交换数据:
Intent提供了多个重载的方法来“携带”额外的数据包:
putExtras(Bundle data):向Intent中放入需要“携带”的数据包。
Bundle getExtras():取出Intent所“携带”的数据包
putExtra(String name,Xxx value):向Intent中按key—value对的形式存入数据。
getXxxExtra(String name):从Intent中按key取出指定类型的数据。
上面方法中的Bundle就是一个简单的数据携带包,该Bundle对象包含了多个方法来存入数据和取出数据。
Bundle相关方法:
putXxx(String,Xxx data):向Bundle放入Int,Long等各种类型的数据
putSerializable(String,Serializable data):向Bundle中放入一个可序列化的对象
getXxx(String key):从Bundle取出Int,Long等各种类型的数据
getSerializable(String key,Serializable data):从Bundle取出一个可序列化的对象
activity_main.xml :
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/button1"
android:layout_marginLeft="43dp"
android:layout_toRightOf="@+id/button1"
android:text="跳转返回结果" />
activity_thrid_intent.xml :
<RadioGroup
android:id="@+id/radioGroup1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="14dp" >
<RadioButton
android:id="@+id/radio0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
android:text="RadioButton1" />
<RadioButton
android:id="@+id/radio1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="RadioButton2" />
<RadioButton
android:id="@+id/radio2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="RadioButton3" />
</RadioGroup>
AndroidManifest.xml:
<activity
android:name="com.coslay.intenttest.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.coslay.intenttest.ThridIntent"
android:label="@string/title_activity_thrid_intent" >
</activity>
代码说明:
配置Activity时通常指定如下属性:
name:指定该Activity的实现类的类名
icon:指定该Activity对应的图标
label:指定该Activity的标签
exported:指定该Activity是否允许被其他应用调用。如果将该属性设为true,那么该Activity将可以被其他应用调用。
launchMode:指定该Activity的加载模式,该属性支持standard,singleTop,singleTask,和singleInstance
除此之外,配置Activity时通常需要指定一个或多个<intent_fiilter.../>元素,该元素用于指定该Activity可响应的Intent。