您的位置:首页 > 移动开发 > Android开发

Android活动间调用并且返回后的数据

2014-08-27 18:28 246 查看
Android活动之间相互跳转并且返回数据的时候,需要使用Activity的startActivityForResult()方法。下面将有一个例子来详细讲述startActivityForResult()方法和一些注意事项。

例子:

1. activity_first.xml

 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".FirstActivity" >

<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginTop="20dp"
android:text="转到SecondActivity"
android:onClick="OnSecondClick"/>

<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/button"
android:onClick="OnThirdClick"
android:text="转到ThirdActivity" />

</RelativeLayout>


2. FirstActivity

 

package com.example.teststartactivityforresult;

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

public class FirstActivity extends Activity {

public String message;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first);
}

public void OnSecondClick(View v){
Intent intent  = new Intent();
intent.setClass(this, SecondActivity.class);
startActivityForResult(intent,2);//转到SecondActivity
}

public void OnThirdClick(View v){
Intent intent  = new Intent();
intent.setClass(this, ThirdActivity.class);
startActivityForResult(intent,3);//转到ThirdActivity
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch(requestCode){
case 2:
switch(resultCode){
case  0:
message = data.getStringExtra("return");
Toast.makeText(this, message, Toast.LENGTH_LONG).show();
break;
case 1:
message = data.getStringExtra("return");
Toast.makeText(this, message, Toast.LENGTH_LONG).show();
break;
}
break;
case 3:
switch(resultCode){
case  RESULT_OK:
message = data.getStringExtra("return");
Toast.makeText(this, message, Toast.LENGTH_LONG).show();
}
break;
}
}

}


3. activity_second.xml

 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".SecondActivity" >

<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginTop="20dp"
android:text="返回0到FirstActivity"
android:onClick="OnButtonClick"/>

<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/button"
android:layout_below="@+id/button"
android:layout_marginTop="18dp"
android:onClick="OnButton2Click"
android:text="返回1到FirstActivity" />

</RelativeLayout>


4. SecondActivity

 

package com.example.teststartactivityforresult;

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

public class SecondActivity extends Activity {

public Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);

intent = this.getIntent();

}

public void OnButtonClick(View v){
intent.putExtra("return", "SecondActivity-0- 返回的内容");
setResult(0,intent);//回调FirstActivity
finish();//一定要结束该Activity  结束后返回到FirstActivity只执行onActivityResult方法
}

public void OnButton2Click(View v){
intent.putExtra("return", "SecondActivity-1-返回的内容");
setResult(1,intent);//回调FirstActivity
finish();//一定要结束该Activity  结束后返回到FirstActivity只执行onActivityResult方法
}

}


5. activity_third.xml

 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".ThirdActivity" >

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />

</RelativeLayout>


6. ThirdActivity

package com.example.teststartactivityforresult;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;

public class ThirdActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_third);

Intent intent = this.getIntent();
intent.putExtra("return", "ThirdActivity返回的内容");
setResult(RESULT_OK,intent);
finish();
}

}


 

实现流程:

以FirstActivity和SecondActivity为例。

1. FirstActivity跳转到SecondActivity。

2. SecondActivity使用getIntent()方法,获得FirstActivity传过来的Intent对象。

3. SecondActivity将需要返回的数据封装在Intent对象中。

4. SecondActivity 使用serResult()方法将Intent对象返回。

5. SecondActivity  finish()。

6. FirstActivity执行onActivityResult方法。

注意事项:

对根据上面的例子进行一下说明。

1. 一个Activity可以调用多个Activity并且返回数据,例如FirstActivity.

2. 被调用并且需要返回数据的Activity可以根据不同情况给予不同的返回数据,例如SecondActivity。

3. FirstActivity调用SecondActivity后需要返回FirstActivity的时候,SecondActivity必须执行finish(),返回到FirstActivity后只执行onActivityResult方法。

参考网址:

1.http://blog.csdn.net/conowen/article/details/7292246
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐