Android官方开发文档Training系列课程中文版:构建第一款安卓应用之启动另一个Activity
原文地址:http://android.xsoftlab.net/training/basics/firstapp/starting-activity.html#CreateActivity
在完成了上一節課之后,你有了一個帶有輸入框和按鈕的單屏幕Activity。在這節課中,你將會在MyActivity中添加一些代碼,以便用戶在點擊Send的按鈕啟動一個新的Activity.
響應Send按鈕
1 . 在AS中,打開res/layout下的activity_my.xml文件。
2 . 找到Button標簽< Button >,在其中添加android:onClick 屬性:
在這里 android:onClick中設置的值”sendMessage”,在當用戶點擊按鈕的時候,系統會調用Activity中以”sendMessage”命名的方法。
3 . 在java/com.mycompany.myfirstapp下打開MyActivity.java文件。
4 . 在MyActivity.java中添加sendMessage()方法,就像下面這樣:
為了確保系統可以使代碼中的方法與android:onClick相匹配,方法的標識符必須正確,通常情況下,方法必須包括:
- public
- 有個Void的返回值
- 有且僅有一個View類型的參數,它代表點擊的時候回調的點擊對象。
構建一個Intent
1 . 在MyActivity.java的sendMessage()方法內,創建一個Intent來啟動一個名叫DisplayMessageActivity 的Activity:
public void sendMessage(View view) {Intent intent = new Intent(this, DisplayMessageActivity.class); }Note: 如果你在使用像AS這種IDE工具,那么引用DisplayMessageActivity 將會引起錯誤,因為這個類還沒有被創建。
這里的構造方法有兩個參數:
- Context 是第一個參數,這里使用了this是因為Activity是Context的子類。
- Class 類是系統將要分發的APP組件,在這里,這個Activity將會被啟動。
AS會指示你必須導入Intent類。
2 . 在文件的頂部,導入Intent類:
import android.content.Intent;在AS中按下Alt+Enter來導入類。
3 . 在sendMessage()方法內部,使用findViewById()來獲取EditText的引用:
public void sendMessage(View view) {Intent intent = new Intent(this, DisplayMessageActivity.class);EditText editText = (EditText) findViewById(R.id.edit_message); }4 . 在文件的頂部導入EditText類。
5 . 關聯文本到一個名為message 的本地變量中,然后使用putExtra()函數把這個文本值放入到intent對象里:
一個Intent對象可以攜帶被稱為extras的鍵值對。putExtra()方法將鍵放在第一個參數中,將值放在第二個參數中。
6 . 在MyActivity類的頂部,像下面這樣添加一個EXTRA_MESSAGE 的定義:
public class MyActivity extends ActionBarActivity {public final static String EXTRA_MESSAGE = "com.mycompany.myfirstapp.MESSAGE";... }7 . 在sendMessage()方法內,為了完成Intent的使命,調用startActivity()方法傳遞第1步創建的Intent對象。
完成以上代碼,那么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); }系統在接收到這個請求之后,會啟動Intent中指定的Activity的實例,現在你需要為了接下來的工作創建一個DisplayMessageActivity類。
創建第二個Activity
所有的Activity的子類必須實現onCreate()方法。這個方法是Activity對象接收Intent消息的地方,然后顯示消息。還有,onCreate()方法中必須使用setContentView()方法與指定的Acivity布局文件相結合。這里是Activity指定初始化操作的地方。
使用AS創建一個新的Activity
AS會在你創建一個新Activity的時候自動實現 onCreate()方法。
1 . 在AS中,在java目錄下,選擇包com.mycompany.myfirstapp,右擊,選擇New > Activity > Blank Activity。
2 . 在 Choose options窗口中,填入下面這些信息:
- Activity Name: DisplayMessageActivity
- Layout Name: activity_display_message
- Title: My Message
- Hierarchical Parent: com.mycompany.myfirstapp.MyActivity
- Package name: com.mycompany.myfirstapp
點擊Finish
3 . 打開DisplayMessageActivity.java
現在類中已經有了onCreate()方法,稍后需要更新這個方法的實現。除了它還包含onOptionsItemSelected()的實現,它是用來處理ActionBar上的點擊實現,現在保持它在這個地方不要動。
4 . 刪掉onCreateOptionsMenu()方法,這里暫時還不需要。
Note:如果你在使用AS進行開發,那么現在就可以運行APP了,不過不會有什么效果,因為第二個APP還什么都沒實現。
不使用AS創建新的Activity
如果你使用的是其它的IDE,或者是命令行,按照下面來:
1 . 創建一個名為DisplayMessageActivity.java的新文件,然后把它放到src/目錄下。
2 . 在這個文件下填入如下代碼:
Note : 如果你使用的是類似AS的IDE,工程中不會包含setContentView()所需要的布局文件activity_display_message。這沒關系,因為你稍后不會使用到這個布局。
3 . 在strings.xml文件中,填入新的Activity的標題:
<resources>...<string name="title_activity_display_message">My Message</string> </resources>4 .在清單文件AndroidManifest.xml中,Application標簽下添加DisplayMessageActivity類的標簽< Activity >:
<application ... >...<activity android:name="com.mycompany.myfirstapp.DisplayMessageActivity"android:label="@string/title_activity_display_message"android:parentActivityName="com.mycompany.myfirstapp.MyActivity" ><meta-data android:name="android.support.PARENT_ACTIVITY"android:value="com.mycompany.myfirstapp.MyActivity" /></activity> </application>android:parentActivityName屬性生命了這個Activity的父層級Activity。系統使用這個值來實現默認的導航習慣,在 Android 4.1 (API level 16)及更高的版本上點擊 Up navigation會回到指定父層級Activity。你可以使用 Support Library 支持庫來對老版本兼容這一點,然后添加跟這里一樣的< meta-data >標簽。
接收Intent
無論用戶怎么導航,每一個Activity都是被Intent調起來的,你可以在被調用的Activity中通過getIntent()方法拿到Intent對象,然后從其中取出包含的值。
1 . 編輯java/com.mycompany.myfirstapp目錄下的DisplayMessageActivity.java文件。
2 . 在onCreate()方法中,移除這一行:
3 . 使用一個本地變量接收Intent。
Intent intent = getIntent();4 . 在類的頂部導入Intent的類。
5 . 通過getStringExtra()方法取出被傳遞的消息。
展示消息
1 在onCreate()方法內,創建一個TextView對象。
TextView textView = new TextView(this);2 設置文本的大小和消息:
textView.setTextSize(40); textView.setText(message);3 然后通過setContentView()添加TextView到Activity的根目錄中。
setContentView(textView);4 在文件的頂部導入TextView類。
然后完成的DisplayMessageActivity onCreate()方法應該是這樣的:
你先就可以運行APP了,當它打開之后,輸入一些文本到輸入框中,點擊Send按鈕,然后輸入的文本就會出現在第二個Activity中了。
就是這樣,你已經完成了第一個安卓應用。
下一節課會學習到如何添加ActionBar.
總結
以上是生活随笔為你收集整理的Android官方开发文档Training系列课程中文版:构建第一款安卓应用之启动另一个Activity的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: XGB的python实现
- 下一篇: Dubbo+Zookeeper+Spri