Activity 之使用

Activity 之使用

本文內容
1. 使用 Activity 顯式簡單界面
2. Activity 之間的跳轉
    2.1 startActivity
    2.3 startActivityForResult
3. Activity 之間的數據交互
4. Activity 的啓動
    4.1 顯示啓動
    4.2 隱式啓動
5. 啓動系統中常見的 Activity
    5.1 打開瀏覽器網頁
    5.2 打開相冊
    5.3 打開發送短信界面
    5.4 打開撥號界面
6. 結束 Activity

1. 使用 Activity 顯式簡單界面

  • 創建一個 Activity 的子類 MainActivity ,繼承 Activity
package com.zhangmiao.activityproject;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}
  • 創建 MainActivity 的界面 activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:id="@+id/main_activity_message_tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:freezesText="true"
        android:text="這是 MainActivity" />
</LinearLayout>
  • 在清單文件中聲明 MainActivity
 <activity
    android:name=".MainActivity"
    android:configChanges="orientation|screenSize"
    >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

2. Activity 之間的跳轉

2.1 startActivity

  通過調用 startActivity() 方法可以啓動其他 Activity,在 Intent 中指定想要啓動的 Activity ,Intent 對象還可能攜帶少量數據傳遞給想要啓動的 Activity。

  • 簡單的 MainActivity 跳轉 FirstActivity 界面
                  Intent firstIntent = new Intent(MainActivity.this, FirstActivity.class);
                  //攜帶數據
                  firstIntent.putExtra("from", "MainActivity");
                  startActivity(firstIntent);
    

2.2 startActivityForResult

  有時,可能需要從啓動的 Activity 獲得結果。在這種情況下,就通過 startActivityForResult() 方法來啓動 Activity ,被啓動的 Activity 通過 setResult() 方法返回數據,啓動的 Activity 通過 onActivityResult() 方法獲取返回的數據。

  • 簡單的 MainActivity 跳轉 FirstActivity 界面,FirstActivity 返回數據給 MainActivity

    Intent firstIntent = new Intent(MainActivity.this, FirstActivity.class);
    firstIntent.putExtra("from", "MainActivity");
    startActivityForResult(firstIntent,10001);
    
  • FirstActivity 在合適的位置返回數據給 MainActivity

          Intent intent = new Intent();
          intent.putExtra("result","OK");
          setResult(20001,intent);
    
  • MainActivity 接收 FirstActivity 返回的數據

      @Override
      protected void onActivityResult(int requestCode, int resultCode, Intent data) {
          super.onActivityResult(requestCode, resultCode, data);
          if (requestCode == 10001 && resultCode == 20001){
              if (data != null) {
                  String result = data.getStringExtra("result");
              }
          }
      }
    

3. Activity 之間的數據交互

  可以使用 Intent 對象進行數據的傳遞。Intent 重載了很多 putExtra() 方法,包括了 Java 八大基本類型以及其數組類型等。

  • MainActivity 跳轉 FirstActivity 界面,並傳遞 String 類型的數據
Intent firstIntent = new Intent(MainActivity.this, FirstActivity.class);
firstIntent.putExtra("from", "MainActivity");
startActivityForResult(firstIntent,10001);

  Intent 對象還有一個 putExtras(Bundle bundle) 方法,就是把需要傳遞的數據組合在一起進行傳遞。

  • MainActivity 跳轉 FirstActivity 界面,使用 putExtras(Bundle bundle) 傳遞數據
Intent firstIntent = new Intent(MainActivity.this, FirstActivity.class);
Bundle bundle = new Bundle();
bundle.putString("from", "MainActivity");
bundle.putInt("count", 1);
firstIntent.putExtras(bundle);
startActivityForResult(firstIntent,10001);

4. Activity 的啓動

4.1 顯示啓動

  顯示啓動的方式:

  1. 直接在 Intent 構造方法啓動:

    Intent firstIntent = new Intent(MainActivity.this, FirstActivity.class);
    
  2. setComponent

    ComponentName componentName = new ComponentName(this,FirstActivity.class);
    Intent firstIntent = new Intent();
    firstIntent.setComponent(componentName);
    startActivity(firstIntent);
    
  3. setClass / setClassName

    Intent firstIntent = new Intent();
    firstIntent.setClass(this,FirstActivity.class);
    firstIntent.setClassName(this,"com.zhangmiao.activityproject.FirstActivity");
    startActivity(firstIntent);
    

4.2 隱式啓動

  隱式啓動就是要在該 Activity 中設置 IntentFilter 屬性,只要啓動的 Intent 匹配 IntentFilter 的條件就可以啓動相應的 Activity 。

  對於想要作出響應的每一個 Intent 類型,必須加入相應的 < intent-filter >,其中包括一個 < action > 元素,還可選擇性地包括一個 < category > 元素或一個 < data > 元素。這些元素指定 activity 可以響應的 Intent 類型。

  • 例如調用系統的相冊
    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_GET_CONTENT);
    intent.setType("image/*");
    startActivity(intent);
    

5. 啓動系統中常見的 Activity

  系統給我們提供了很多常用的 Activity,可以用來打開瀏覽器,打開發短信界面,打開相冊界面,打開撥號界面等等。

5.1 打開瀏覽器網頁

Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);

5.2 打開相冊

Intent intent = new Intent();
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
startActivity(intent);

5.3 打開發送短信界面

Intent intent = new Intent();
intent.setAction(Intent.ACTION_SNED);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT,"Hello World!");
startActivity(intent);

5.4 打開撥號界面

Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse("tel:110"));
startActivity(intent);

6. 結束 Activity

  可以通過調用 Activity 的 finish() 方法來結束 Activity 。還可以通過調用 finishActivity() 方法結束之前啓動的另一個 Activity 。
  大多數情況下,不應該使用 finish() 或 finishActivity() 方法來結束 Activity 。Android 系統會管理 Activity 的生命週期,會在合適的時機結束 Activity 。調用結束 Activity 的方法可能對預期的用戶體驗產生不良影響,因此只應該在確實不想讓用戶返回此 Activity 實例時使用。

參考文章:

  1. Activity 必知必會
  2. Android之Activity系列總結(一)—Activity概覽
  3. Android四大組件之Activity詳解
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章