Android 四大元件之 Activity-帶值跳轉
從一個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>
結果