1. 程式人生 > >Android中使用Intent實現一般頁面跳轉和帶引數頁面跳轉

Android中使用Intent實現一般頁面跳轉和帶引數頁面跳轉

一、Intent介紹

Intent的理解

      Intent, 直譯為意圖, 也就是你想要做什麼或想要去哪?

      IntentActivity, ServiceBroadcastReceiver這三個應用元件之間進行通訊的信使,

      例如: 我要在Activity中啟動另一個Actvity, 就必須使用Intent物件

      意圖物件還可以攜帶資料

注意: Intent不是Android中的四大應用元件之一

Intent
的分類

顯示意圖 : 明確指定的目標元件的意圖

建立物件 : Intent(Context context, Class clazz)

何時使用 : 當操作當前自己應用的元件時使用

隱式意圖 : 沒有明確指定目標元件的意圖

建立物件 : Intent(String action) 

何時使用 : 當操作其它應用的元件時使用

 IntentFilter的理解

     在配置Activity, 可以為Activity指定一個IntentFilter的配置

     •如果你的Activity

希望其它應用能訪問到, 需要配置<intent-filter>

     •如果你想啟動其它應用的介面你必須用隱式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/課程學習資料總結