Android學習路線(五)開啟另一個Activity,androidactivity

來源:互聯網
上載者:User

Android學習路線(五)開啟另一個Activity,androidactivity

在完成了 上一篇課程後,你已經有了一個應用。這個應用展示了一個包含一個文字框和一個按鈕的activity(一個單獨的介面)。在這次的課程中,你將會通過在MainActivity中添加一些代碼,來讓當給你點擊Send按鈕時能夠跳轉到另一個activity中。

響應Send按鈕

為了響應按鈕的點擊事件,開啟fragment_main.xml 布局檔案,然後在  <Button> 元素中加入android:onClick屬性:

<Button    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="@string/button_send"    android:onClick="sendMessage" />

這個 android:onClick 屬性的值, "sendMessage",是你的activity中的一個方法的名稱,當使用者點擊按鈕時,就會調用這個方法。

開啟MainActivity 類,加入相應的方法:

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

為了能夠讓系統匹配到給android:onClick賦的值的方法名稱所對應的方法,簽名必須嚴格的按照顯示的來。(the signature must be exactly as shown. )具體如下,這個方法必須要:

  • 是Public的
  • 傳回型別為void
  • 只有一個 View 類型的參數(它就代表被點擊的View

接下來,你就要填滿這個方法。來讀取文字框中的內容,然後將內容傳遞到另一個activity內。

構架一個Intent

Intent 是一個提供兩個分離的組件(例如兩個activities)在運行時綁定的對象。Intent 表示一個應用“意圖要做些事情”。你可以使用intent做很多很多事情,但是它最常用的還是開啟另一個activity。

sendMessage() 方法內部,建立一個Intent 來開啟一個名為DisplayMessageActivity的activity:

Intent intent = new Intent(this, DisplayMessageActivity.class);

這需要先匯入 Intent 類:

import android.content.Intent;

貼士: 在Eclipse中,可以用Ctrl + Shift + O來匯入未匯入的類(在Mac中使用Cmd + Shift + O)。

這裡使用的構造器包含兩個參數:

  • 第一個參數是 Context (這裡使用this 是因為Activity 類是 Context的子類)
  • 第二個參數是系統要傳遞給Intent 的應用組件的類(在本例中是要被開啟的activity)
向其他的應用發送intent

在本應用中建立的intent是明確的intent,因為izhgeIntent 指定了intent應該給出的明確的應用組件。然後Intent同樣也可以是隱晦的,在一些情況下,intent並沒有指定組件,但是它允許在裝置安裝的應用中滿足作為參數傳入Intent的規範的應用來響應這個intent。更多資訊,請查看課程: Interacting with Other Apps.

提示: DisplayMessageActivity 的將會導致一個error,因為你在使用向Eclipse這種IDE,它會發現這個類還不存在。現在先忽略這個錯誤,你馬上就會建立這個類。

Intent不僅僅只能夠開啟另一個activity,它還能夠攜帶一個包含資料的bundle。在sendMessage() 方法內部,使用findViewById() 來擷取EditText元素,同時將它的值添加到intent中:

Intent intent = new Intent(this, DisplayMessageActivity.class);EditText editText = (EditText) findViewById(R.id.edit_message);String message = editText.getText().toString();intent.putExtra(EXTRA_MESSAGE, message);

提示: 你現在需要匯入android.widget.EditText。你馬上就要定義一個EXTRA_MESSAGE常量。

Intent 可以攜帶一系列被稱作extars的不同類型的鍵值對的集合。putExtra() 方式的第一個參數是鍵的名稱,第二個參數是值。

為了讓下一個activity能夠查到extra data,你應該使用公用的常量為你的intent的鍵賦值。因此,在MainActivity的頭部添加定義EXTRA_MESSAGE

public class MainActivity extends ActionBarActivity {    public final static String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE";    ...}

在你的應用有何其他應用互動的情況下,使用你的應用的包名作為intent extras定義的鍵的定義是一個很好的選擇。

開啟第二個Activity

要開啟一個activity,調用startActivity() 方法,並且將Intent傳進去,系統接受調用後會開啟intent所指定的Activity 的一個執行個體。

在新的代碼中,被Send按鈕調用的完整的sendMessage() 方法應該像下面這樣:

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

現在你需要建立DisplayMessageActivity 類來繼續工作了。

建立第二個Activity

圖1. Eclipse中的建立Activity嚮導

使用Eclipse建立 activity :

  1. 在工具列點擊 New  。
  2. 在出現的視窗中,開啟Android 檔案夾並選擇Android Activity,然後點擊Next
  3. 選擇BlankActivity 點擊 Next
  4. 填滿Activity的詳情:
    • Project: MyFirstApp
    • Activity Name: DisplayMessageActivity
    • Layout Name: activity_display_message
    • Fragment Layout Name: fragment_display_message
    • Title: My Message
    • Hierarchial Parent: com.example.myfirstapp.MainActivity
    • Navigation Type: None

    點擊 Finish

如果你使用的不是Eclipse,或者是在使用命令列工具,那麼在src/ 目錄下建立DisplayMessageActivity類,然後再MainActivity.java 中匯入。

開啟DisplayMessageActivity.java 檔案,如果你使用Eclipse:

  • 這個類中已經包含了一個onCreate() 方法的實現,稍後你會更新這個實現。
  • 同樣還有一個onCreateOptionsMenu() 方法的實現,但是你在本例中不會使用到,你可以將它刪掉。
  • 還有onOptionsItemSelected() 方法,它使用者處理action bar 的Up 事件,保持它的原樣。
  • 還有一個繼承Fragment類的 PlaceholderFragment 類。在這個Activity中你不會使用到。

Fragments 將方法和UI分解為可重用的模組。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.