现在的位置: 首页 > 综合 > 正文

Android 启动其他Activity并返回结果

2017年10月23日 ⁄ 综合 ⁄ 共 4072字 ⁄ 字号 评论关闭

实现从一个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。

抱歉!评论已关闭.