[Android Training視頻系列]1.4 Starting Another Activity

來源:互聯網
上載者:User

1.主要內容
本小結在1.3節的基礎上,繼續完善代碼,會書寫Button響應事件,在響應事件中建立一個Intent去啟動另外一個Activity。
2.視頻講解
http://www.eyeandroid.com/thread-11210-1-1.html

3.翻譯參考

 

Respond to the Send Button-響應Send(發送)按鈕

 

響應按鈕的on-click(點擊)事件,開啟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就是當使用者點擊你螢幕按鈕時觸發方法的名字。

添加相應的方法在MyFirstActivity類中:

 /** 當使用者點擊Send按鈕時調用 */
 public void sendMessage(View view) {
    // 做一些相應按鈕的操作
 }
 

注意:在Eclipse中,按Ctrl + Shift + O 可以匯入缺失的類(在Mac中使用Cmd + Shift + O )

請注意,為了讓系統能夠將這個方法(你剛在MyFirstActivity中添加的sendMessage方法)與在android:onClick屬性中提供的方法名字匹配,它們的名字必須一致,特別是,這個方法必須滿足以下條件:

  • 公用的
  • 沒有傳回值
  • 有一個唯一的視圖(View)參數(這個視圖就是將被點擊的視圖)

接下來,你可以在這個方法中編寫讀取常值內容的代碼,並將該內容傳到另一個Activity


Build an Intent-構建一個Intent(意圖)

Intent(意圖)是在不同組件中提供運行時串連的對象(比如兩個Activity)。Intent(意圖)代表一個應用"想去做什麼事",你可以用它做各種各樣的任務,不過大部分的時候他們被用來啟動另一個Activity。在sendMessage()方法中建立一個Intent(意圖)並啟動名為DisplayMessageActivity的Activity:

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

在這個Intent建構函式中有兩個參數: 第一個參數是Context(上下文)(之所有可以用this是因為當前Activity(MyFirstActivity)是Context的子類) 系統需要傳遞Intent的應用組件的class對象(在這個案例中,這個activity應該被啟動)

注意:如果你正在使用的是類似Eclipse的IDE,這裡對DisplayMessageActivity的引用會報錯,因為這個類還不存在;注意這個錯誤,你很快就要去建立這個類了。

一個Intent(意圖)不僅允許你啟動另一個Activity,同時也可以傳遞一個資料包到另一個Activity,ok,用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);

Sending an intent to other apps-發送intent(意圖)到其他app(應用)

在這課中建立的Intent(意圖)包含了一個非常明確的意圖,因為它指定了一個Intent需要的精確app(應用)組件; 然而,在Intent沒有指定明確的組件時,Intent(意圖)是隱式的,但它允許安裝在裝置上的任何應用來回應, 只要這個應用滿足在各個Intent(意圖)參數中指定的action(行動)的中繼資料規範,想瞭解更多資訊, 可以去看Interacting with Other Apps課程

Intent(意圖)可以傳遞各種各樣的以索引值對形式出現的集合,可以稱它為extras,putExtra()方法用字元竄作為它的key,第二個參數作為它的值為了在下一個Activity中擷取extra(附加的)資料,你應該定義一個公用常量作為key(鍵),ok,在MyFirstActivity類的頂部定義一個名為EXTRA_MESSAGE的常量:

 public class MyFirstActivity extends Activity {
    public final static String EXTRA_MESSAGE = "com.example.myapp.MESSAGE";
    ...
   }

為使extras鍵唯一,使用你應用的包名作為extras鍵的首碼是一個很好的做法,因為你的應用可能需要跟其他應用互動。


Start the Second Activity-啟動第二個Activity

啟動一個Activity,你只需要調用startActivity()方法然後傳入你的Intent(意圖)系統接收到你的請求後會執行個體化在Intent中指定的Activity,包含這個方法擁有的,被Send(發送)按鈕調用的完整sendMessage()方法現在就像這樣:

  /** 當使用者點擊Send按鈕時調用 */
  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支援程式能夠執行起來


Create the Second Activity-建立第二個Activity

在你的項目中,在src/<package-name>/路徑下建立一個名為DisplayMessageActivity.java的類。

註:在Eclipse中,在src/路徑下點滑鼠右鍵選中New > Class,輸入DisplayMessageActivity,並且指定繼承android.app.Activity 。

在這個類中,添加onCreate()回調方法:

public class DisplayMessageActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
  }

所有Activity的子類都必須實現onCreate()方法,當系統建立Activity執行個體時就會調用該方法,這個方法是你必須定義activity布局以及初始化必要activity組件的地方。

 


Add it to the manifest-將Activity加入manifest(清單)檔案

你必須在manifest(清單)檔案,AndroidManifest.xml中使用<activity>元素宣告你所有的Activity;因為DisplayMessageActivity是由一個明確的Intent(意圖)調用的,所以它不需要任何intent filters(意圖過濾器)(intent filters,你可以在manifest檔案中聲明MyFirstActivity的地方看到)如此DisplayMessageActivity就可以在<application>元素中用一句很簡單的代碼聲明;

 <application ... >
    <activity android:name="com.example.myapp.DisplayMessageActivity" />
    ...
 </application>
 

這個app(應用)現在就可以運行了,因為第一個Activity中的Intent現在可以解析DisplayMessageActivity類了,如果你現在運行app,點擊Send(發送)按鈕啟動,第二個Activity,它不會顯示任何東西;


Receive the Intent-擷取Intent(意圖)

每一個被Intent調用的Activity,不管使用者將它導航到哪,你都可以在啟動的Activity中通過getIntent()方法得到Intent以及Intent包含的資料。在DisplayMessageActivity類的onCreate()方法中,得到intent以及MyFirstActivity提供的附加資訊:

 Intent intent = getIntent();
 String message = intent.getStringExtra(MyFirstActivity.EXTRA_MESSAGE);


Display the Message-顯示資訊

在螢幕上顯示資訊,建立一個TextView組件,並且使用setText()設定它的值,然後通過setContentView()方法將TextView作為root(根)視圖添加到Activity的布局。

DisplayMessageActivity完整的onCreate()方法現在看起來如下:

@Override
 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
 
    // 從intent中擷取資訊
    Intent intent = getIntent();
    String message = intent.getStringExtra(MyFirstActivity.EXTRA_MESSAGE);
 
    // 建立TextView對象
    TextView textView = new TextView(this);
    textView.setTextSize(40);
    textView.setText(message);
 
    setContentView(textView);
 }

現在你可以運行app,在文本中輸入資訊,點擊Send(發送)按鈕,ok,現在就可以在第二Activity上看到資訊了。

兩個Activity在同一個應用中,運行在Android4.0的版本上

 
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.