Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> [Android Training視頻系列]Starting Another Activity

[Android Training視頻系列]Starting Another Activity

編輯:關於Android編程

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" /> www.2cto.com
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上看到信息了。


 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved