從一個Activity跳轉到另外一個Activity,並且可以帶值跳轉,但我們日常生活中使用App時會經常遇到這種狀況,假設有某個界面A,點擊上面不同的按鈕會啓動不同的界面B、C、D。。。,這些界面會處理某個業務並將處理結果返回給界面A,可以採用帶返回值得跳轉來實現這功能
Activity帶返回值跳轉
實現Activity帶返回值的跳轉,主要通過3個方法:
StartActivityForResult(Intent intent,requestCode):用於啓動另一個Activity,並並獲取其返回值
參數intent表示意圖,用於指定從哪一個界面去獲取返回值。
參數requestCode表示請求碼,要求大於等於0。
setResult(resultCode,data):用於返回第二個界面處理後的數據
參數resultCode表示返回碼,可以用任意的整型值來表示,一般會使用Activity中的常量來表示,RESULT_CANCELED(表示0)、RESULT_OK(表示-1)、RESULT_FIRST_USER(表示1)
參數data表示返回的數據,用Intent對象來存放這些數據。
在設置了返回值後,需要調用finish()方法類銷燬當前界面,才能夠返回到上一個界面。
OnActivityResult(int requestCode,int resultCode,Intent data):用於處理第二個界面的返回值
用於處理第二個界面的返回值
requestCode就是startActivityForResult方法中的請求碼resultCode表示第二個界面的返回碼data就是返回的數據。
三個方法的使用介紹
- congdiyige頁面跳轉到第二個頁面時,使用startActivityForResult方法
- 在第二個頁面傳回數據時,使用setResult方法
- 數據傳回來之後使用onActivityResult方法處理數據
代碼如下:
MainActivity.java
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends Activity {
Button btn;
EditText et;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//獲取組件對象
et=(EditText) findViewById(R.id.editText1);
btn=(Button) findViewById(R.id.button1);
//設置監聽
btn.setOnClickListener(new OnClickListener() {
//點擊事件
@Override
public void onClick(View v) {
//創建意圖對象,不要忘記註冊SecondActivity
Intent intent = new Intent();
intent.setClass(MainActivity.this, SecondActivity.class);
//跳轉獲取返回值 11,表示requestcode
startActivityForResult(intent, 11);
}
});
}
//用於處理第二個界面的返回值
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(data!=null){//判斷意圖是否爲空
String str=data.getStringExtra("msg");
if(requestCode==11){
et.setText(str);
}
}
}
}
SecondActivity.java
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class SecondActivity extends Activity {
EditText et;
Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
//獲取組件對象
et=(EditText) findViewById(R.id.editText2);
btn=(Button) findViewById(R.id.button2);
//設置監聽事件
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {//處理監聽事件
Intent intent=new Intent();
//獲取輸入的數據
String str=et.getText().toString().trim();
//將數據綁定到intent上
intent.putExtra("msg", str);
//回傳數據20,爲resultCode
setResult(20, intent);
}
});
}
}
activity_main.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=".MainActivity" >
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="跳轉" />
<EditText
android:id="@+id/editText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/button1"
android:layout_centerHorizontal="true"
android:layout_marginBottom="76dp"
android:ems="10" >
<requestFocus />
</EditText>
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="23dp"
android:text="第一個界面" />
</RelativeLayout>
activity_second.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="回傳" />
<EditText
android:id="@+id/editText2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="81dp"
android:ems="10" >
<requestFocus />
</EditText>
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="18dp"
android:text="第二個界面" />
</RelativeLayout>
結果