Android中使用Intent實現一般頁面跳轉和帶引數頁面跳轉
一、Intent介紹
Intent的理解
Intent, 直譯為意圖, 也就是你想要做什麼或想要去哪?
Intent是Activity, Service和BroadcastReceiver這三個應用元件之間進行通訊的信使,
例如: 我要在Activity中啟動另一個Actvity, 就必須使用Intent物件
意圖物件還可以攜帶資料
注意: Intent不是Android中的四大應用元件之一
Intent 的分類
顯示意圖 : 明確指定的目標元件的意圖
建立物件 : Intent(Context context, Class clazz)
何時使用 : 當操作當前自己應用的元件時使用
隱式意圖 : 沒有明確指定目標元件的意圖
建立物件 : Intent(String action)
何時使用 : 當操作其它應用的元件時使用
IntentFilter的理解
•在配置Activity時, 可以為Activity指定一個IntentFilter的配置
•如果你的Activity
•如果你想啟動其它應用的介面你必須用隱式intent, 且目標介面Activty配置了<intent-filter>
•它的作用類似於web中的為Servlet配置的<url-pattern>
相關API
Intent: 意圖
Intent(Context packageContext, Class<?> cls)
Intent(String action): 用於建立隱式意圖物件
putExtra(String name, Xxx value): 儲存額外資料
Xxx getXxxExtra(String name): 獲取額外資料
setData(Uri data): 設定有特定格式的uri資料
Activity: 活動
startActivity(Intent intent): 一般啟動Activity
startActivityForResult(int reqCode, Intent intent): 帶回調啟動Activity
onActivityResult(int reqCode, int resultCode, Intent data): 回撥方法
setResult(int resultCode, Intent data): 設定要返回的結果
finish(): 結束當前Activity
getIntent(): 得到啟動Activity的意圖
二、程式碼示範
佈局檔案
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<EditText
android:id="@+id/et_main_message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="請輸入您的資訊">
</EditText>
<Button
android:id="@+id/btn_main_start1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="一般啟動" />
<Button
android:id="@+id/btn_main_start2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="帶回調啟動" />
</LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<EditText
android:id="@+id/et_second_message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="請輸入您的資訊">
</EditText>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="一般返回"
android:onClick="back1"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="帶結果的返回"
android:onClick="back2"/>
</LinearLayout>
JAVA程式碼
MainActivity.java
package com.atguigu.l02_activity;
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;
import android.widget.Toast;
public class MainActivity extends Activity implements OnClickListener {
private EditText et_main_message;
private Button btn_main_start1;
private Button btn_main_start2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化檢視物件
et_main_message = (EditText) findViewById(R.id.et_main_message);
btn_main_start1 = (Button) findViewById(R.id.btn_main_start1);
btn_main_start2 = (Button) findViewById(R.id.btn_main_start2);
//設定點選監聽
btn_main_start1.setOnClickListener(this);
btn_main_start2.setOnClickListener(this);
}
@Override
public void onClick(View v) {//v就是發生事件的檢視物件(操作的)
if(v==btn_main_start1) {
//Toast.makeText(this, "一般啟動", 0).show();
//1). 建立Intent物件(顯式)
Intent intent = new Intent(this, SecondActivity.class);
//2). 通過intent攜帶額外資料
String message = et_main_message.getText().toString();
intent.putExtra("MESSAGE", message);
//3). 啟動Activity
startActivity(intent);
} else if(v==btn_main_start2) {
//Toast.makeText(this, "帶回調啟動", 0).show();
//1). 建立Intent物件(顯式)
Intent intent = new Intent(this, SecondActivity.class);
//2). 通過intent攜帶額外資料
String message = et_main_message.getText().toString();
intent.putExtra("MESSAGE", message);
//3). 帶回調啟動Activity
int requestCode = 2;
startActivityForResult(intent, requestCode);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//判斷code
if(requestCode==2 && resultCode==3) {
//從data中取出資料
String result = data.getStringExtra("RESULT");
//顯示
et_main_message.setText(result);
}
}
}
SecondActivity.java
package com.atguigu.l02_activity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
/**
* 介面二
*
* @author Administrator
*
*/
public class SecondActivity extends Activity {
private EditText et_second_message;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
et_second_message = (EditText) findViewById(R.id.et_second_message);
//4). 得到intent物件
Intent intent = getIntent();
//5). 通過intent讀取額外資料
String message = intent.getStringExtra("MESSAGE");
//6). 顯示到EditText
et_second_message.setText(message);
}
public void back1(View v) {
//關閉當前介面
finish();
}
public void back2(View v) {
//儲存一個結果
int resultCode = 3;
//準備一個帶額外資料的intent物件
Intent data = new Intent();
String result = et_second_message.getText().toString();
data.putExtra("RESULT", result);
//設定結果
setResult(resultCode, data );
//關閉當前介面
finish();
}
}
執行結果顯示
帶回調啟動
帶結果返回
注:此文章來自尚矽谷http://www.atguigu.com/課程學習資料總結