1. 程式人生 > >第二課:啟動一個新的 Activity(基於AndroidStudio3.2)

第二課:啟動一個新的 Activity(基於AndroidStudio3.2)

完成上一課的學習後,我們已構建了一個應用,它可以顯示一個 Activity(單一螢幕)並帶有一個文字欄位和一個按鈕。在本課中,您將向 MainActivity 新增一些程式碼,這些程式碼可在使用者點按 Send 時啟動一個新的 Activity 來顯示訊息。 一、響應 Send 按鈕 按照以下步驟操作,在 MainActivity.java 中新增一個由按鈕呼叫的函式:

1.在檔案 app > java > com.example.myfirstapp > MainActivity.java 中,新增 sendMessage() 函式存根,如下所示:

public class MainActivity extends AppCompatActivity {
   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
   }

   /** Called when the user taps the Send button */
   public void sendMessage(View view) {
       // Do something in response to button
   }
}

您可能會看到一條錯誤,因為 Android Studio 無法解析用作函式引數的 View 類。因此,請點選,將您的游標放置在 View 宣告上,然後按 Alt + Enter(在 Mac 上,則按 Option + Return),執行快速修復。(如果出現一個選單,請選擇 Import class。) 在這裡插入圖片描述 2.現在,返回到 activity_main.xml 檔案,從按鈕呼叫此函式: -在佈局編輯器中點選以選擇按鈕。 -在 Attributes 視窗中,找到 onClick 屬性並從下拉列表中選擇 sendMessage [MainActivity]。 現在,當點按按鈕時,系統將呼叫 sendMessage() 函式。

記下此函式中的詳細資訊,要讓系統將此函式視為與 android:onClick 屬性相容,需要這些詳細資訊。具體來說,函式必須宣告以下內容: -公共訪問 -空返回值 -以 View 作為唯一引數(它是之前點選的 View 物件) 接下來,您需要填寫此函式以讀取文字欄位的內容,並將該文字傳遞給另一個 Activity。

二、構建一個 Intent Intent 是指在相互獨立的元件(如兩個 Activity)之間提供執行時繫結功能的物件。Intent 表示一個應用“執行某項操作的意向”。您可以將 intent 用於各種任務,但在本課中,您的 intent 用於啟動另一個 Activity。

在 MainActivity.java 中,新增 EXTRA_MESSAGE 常量和 sendMessage() 程式碼,如此處所示:

public class MainActivity extends AppCompatActivity {
    public static final String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    /** Called when the user taps the Send button */
    public void sendMessage(View view) {
        Intent intent = new Intent(this, DisplayMessageActivity.class);
        EditText editText = (EditText) findViewById(R.id.editText);
        String message = editText.getText().toString();
        intent.putExtra(EXTRA_MESSAGE, message);
        startActivity(intent);
    }
}

Android Studio 將再次遇到 Cannot resolve symbol 錯誤,因此,請按 Alt + Enter(在 Mac 上,則按 Option + Return)。您的匯入應按如下所示方式結束:

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

DisplayMessageActivity 仍有錯誤,但沒關係;您將在下一部分中修復該錯誤。

下面是 sendMessage() 中的操作:

  • Intent 建構函式採用兩個引數:
    • Context 是第一個引數(之所以使用 this 是因為 Activity 類是 Context 的子類)
    • 應用元件的 Class,系統應將 Intent(在本例中,為應啟動的 Activity)傳遞至該類。
  • putExtra() 函式將 EditText 的值新增到 intent。Intent 能夠以名為 extra 的鍵值對形式攜帶資料型別。您的鍵是一個公共常量 EXTRA_MESSAGE,因為下一個 Activity 將使用該鍵來檢索文字值。為 intent extra 定義鍵時最好使用應用的軟體包名稱作為字首。這可以確保在您的應用與其他應用互動時這些鍵始終保持唯一。
  • startActivity() 函式將啟動 Intent 指定的 DisplayMessageActivity 例項。現在,您需要建立該類。

三、建立第二個 Activity

  1. 在 Project 視窗中,右鍵點選 app 資料夾並選擇 New > Activity > Empty Activity。
  2. 在 Configure Activity 視窗中,為 Activity Name 輸入“DisplayMessageActivity”,然後點選 Finish(保留所有其他屬性設定為預設值)。

Android Studio 會自動執行三項操作:

  • 建立 DisplayMessageActivity.java 檔案。
  • 建立對應的 activity_display_message.xml 佈局檔案。
  • 在 AndroidManifest.xml 中新增必需的 元素。 在這裡插入圖片描述 如果執行應用並在第一個 Activity 上點按按鈕,將啟動第二個 Activity,但它為空。這是因為第二個 Activity 使用模板提供的空佈局。

四、新增文字檢視 新 Activity 包括一個空白的佈局檔案,因此,現在您需要在訊息將要顯示的位置新增一個文字檢視。

  • 開啟檔案 app > res > layout > activity_display_message.xml。
  • 點選工具欄中的 Turn On Autoconnect (Autoconnect 隨後應啟用,如圖 所示)。 在這裡插入圖片描述
  • 在 Palette 視窗中,點選 Text,然後將 TextView 拖動到佈局中 - 將其放置在靠近佈局頂部中心的位置,使其吸附到出現的垂直線上。Autoconnect 將新增左側和右側約束條件,在水平中心放置檢視。
  • 再從文字檢視的頂部建立一個約束條件,將其限制在佈局頂部,讓它看起來如上圖 所示。

也可以在 Attributes 視窗中展開 textAppearance 並更改屬性(例如 textSize 和 textColor),對文字樣式進行一些調整。

五、顯示訊息 現在,您將修改第二個 Activity,以顯示第一個 Activity 傳遞的訊息。

  1. 在 DisplayMessageActivity.java 中,向 onCreate() 函式新增下列程式碼:
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_display_message);
    
    // Get the Intent that started this activity and extract the string
    Intent intent = getIntent();
    String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);

    // Capture the layout's TextView and set the string as its text
    TextView textView = findViewById(R.id.textView);
    textView.setText(message);
}
  1. 按 Alt + Enter(在 Mac 上,則按 Option + Return)匯入缺少的類。您的匯入應按如下所示方式結束:
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

六、新增向上導航 您的應用中不是主入口的每個螢幕(所有不是主螢幕的螢幕)都應提供導航,以便使用者在應用欄中點按“向上”按鈕後可以返回應用層次結構中的邏輯父螢幕。

您需要做的全部工作是在 AndroidManifest.xml 檔案中宣告哪個 Activity 是邏輯父項。因此,請開啟 app > manifests > AndroidManifest.xml 處的檔案,找到 DisplayMessageActivity 的 標記,然後將其替換為以下程式碼:

<activity android:name=".DisplayMessageActivity"
          android:parentActivityName=".MainActivity" >
    <!-- The meta-data tag is required if you support API level 15 and lower -->
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value=".MainActivity" />
</activity>

Android 系統現在會在應用欄中自動新增“向上”按鈕。

執行應用 現在,點選工具欄中的 Apply Changes,再次執行應用 。當應用開啟後,在文字欄位中鍵入一條訊息,點按 Send 以在第二個 Activity 中檢視顯示的訊息。 在這裡插入圖片描述