亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

【Android Developers Training】 4. 啟動另一

系統(tǒng) 1835 0

注:本文翻譯自Google官方的Android Developers Training文檔,譯者技術(shù)一般,由于喜愛安卓而產(chǎn)生了翻譯的念頭,純屬個人興趣愛好。

原文鏈接: http://developer.android.com/training/basics/firstapp/starting-activity.html


?一. 啟動另一個Activity

在完成了之前的課程后,你已經(jīng)擁有了一個顯示一個Activity(即只有一個屏幕畫面)的應(yīng)用,在這個Activity中有一個文本框和一個按鈕。在這節(jié)課上,你將在 MainActivity 中添加一些新的代碼,這些代碼將實現(xiàn):當(dāng)用戶點擊按鈕后,可以啟動一個新的Activity。

?

一). 發(fā)送按鈕的響應(yīng)

為了響應(yīng)按鈕點擊事件,打開布局文件 activity_main.xml ,在 <Button> 標(biāo)簽中,添加 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 中的一個方法的名字,當(dāng)用戶點擊這個按鈕時,系統(tǒng)會調(diào)用這個方法。

打開 MainActivity 類(在項目工程的 /src 目錄下),然后添加響應(yīng)的方法:

      
        /**
      
      
         Called when the user clicks the Send button 
      
      
        */
      
      
        public
      
      
        void
      
      
         sendMessage(View view) {

    
      
      
        //
      
      
         Do something in response to button
      
      

}
    

這需要你導(dǎo)入 View 類:

      
        import
      
       android.view.View;
    

Tip:

在Eclipse中,按下“ Ctrl + Shift + O ”可以自動導(dǎo)入丟失的類(在Mac上的組合鍵是:“ Cmd + Shift + O ”)。

為了讓系統(tǒng)能夠?qū)⑦@個方法和它在 android:onClick 屬性字段中的方法名這兩者相互關(guān)聯(lián)起來,這個方法的特征必須嚴(yán)格地像上述所表示的那樣,具體來說,方法的特征有如下幾點:

  • 必須是 Public
  • 返回值為 void
  • 只有一個形參 View (這個 View 就是被點擊的 View

接下來,你將會實現(xiàn)這個方法,我們用它來讀取文本框中的內(nèi)容并且將文字發(fā)送給另一個 Activity

?

二). 構(gòu)建一個Intent

Intent 是一種對象,它是在運行時將兩個獨立的組件(比如兩個 Activity )聯(lián)系起來的紐帶。 Intent 代表了一個應(yīng)用的某種“意圖”,你可以使用Intent去完成很多事情,但通常他們被用來啟動另一個Activity。

sendMessage() 這一方法中,創(chuàng)建一個新的 Intent 來啟動另一個稱之為 DisplayMessageActivity 的Activity:

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

這里的構(gòu)造函數(shù)包含了兩個參數(shù):

  • 一個 Context 作為第一個參數(shù)(這里用 this 的原因是 Activity Context 的一個子類)。
  • 應(yīng)用組件中的某個 Class ,它是系統(tǒng)送達(dá) Intent 的目標(biāo)(在此例中,對應(yīng)的是將要被啟動的 Activity

Note:

若你正在使用的是一個集成開發(fā)環(huán)境(IDE),如:Eclipse,那么對 DisplayMessageActivity 的引用將會引起一個錯誤,原因是目前這個類還并不存在。我們現(xiàn)在先暫且忽略這個錯誤,你馬上就將創(chuàng)建這個類。

一個 Intent 不僅僅只能允許你啟動另一個 Activity ,它還能附帶有一些數(shù)據(jù)給這個 Activity ,在 sendMessage() 這一方法中,使用 findViewById() 這個方法來獲取 EditText 控件,并把它的內(nèi)容交給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);
      
    

Note:

你現(xiàn)在需要導(dǎo)入一些聲明: android.content.Intent android.widget.EditText 。稍后你將會定義 EXTRA_MESSAGE 常量。

將Intent發(fā)送給其他應(yīng)用:

這節(jié)課中所創(chuàng)建的 Intent ,我們將它稱之為“顯式的 Intent ”,因為這個 Intent 指明了自己將會發(fā)送給哪一個特定的應(yīng)用組件。然而, Intent 也可以是 隱式的 ”,在這種情況下, Intent 不指明自己期望被發(fā)送到哪個組件,但允許任何安裝在設(shè)備上的應(yīng)用響應(yīng)這個 Intent ,只要它的行為的元數(shù)據(jù)規(guī)格與之相匹配,可以通過閱讀 Interacting with Other Apps 獲得更多信息。

一個 Intent 攜帶以鍵值對形式存放的各種數(shù)據(jù)類型,在 Intent 中這些鍵值對被稱之為 extras , putExtra() 方法中第一個參數(shù)對應(yīng)于鍵,第二個參數(shù)對應(yīng)于值。

為了讓下一個 Activity 可以查詢 extras 的數(shù)據(jù),你應(yīng)該使用一個公共常量來定義 Intent extras 中的鍵。所以在 MainActivity 類的頂端,添加 EXTRA_MESSAGE 的定義:

      
        public
      
      
        class
      
       MainActivity 
      
        extends
      
      
         Activity {

    
      
      
        public
      
      
        final
      
      
        static
      
       String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE"
      
        ;

    ...

}
      
    

Intent extras 的鍵定義時,將你應(yīng)用的包名作為前綴是一個好的習(xí)慣,這樣可以保證他們是唯一的,這有助于你的應(yīng)用和其他應(yīng)用進(jìn)行通信。

?

三). 啟動第二個Activity

為了啟動一個 Activity ,調(diào)用 startActivity() 方法,并且將你的 Intent 對象傳遞給它。之后系統(tǒng)接受到函數(shù)的調(diào)用,并且啟動一個被 Intent 所指定的 Activity 實例。

加上了新的代碼后,被Send按鈕所調(diào)用的 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);

}
      
    

現(xiàn)在你需要創(chuàng)建 DisplayMessageActivity 類使得它能夠正確運行。

?

四). 創(chuàng)建第二個Activity

使用Eclipse創(chuàng)建第二個類:

  1. 在工具欄中點擊“ New
  2. 在出現(xiàn)的窗口中,打開 Android ”文件夾,選擇 Android Activity ”,點擊 Next
  3. 選擇 BlankActivity 點擊 Next
  4. 填寫Activity的細(xì)節(jié)信息:
    • Project : MyFirstApp
    • Activity Name : DisplayMessageActivity
    • Layout Name : activity_display_message
    • Title : My Message
    • Hierarchial Parent : com.example.myfirstapp.MainActivity
    • Navigation Type : None

點擊 Finish

圖1. Eclipse中創(chuàng)建新Activity的向?qū)?

如果你使用的是不同的IDE,或者是命令行,在項目工程中的 src/ ”創(chuàng)建一個新的名為“ DisplayMessageActivity.java ”的文件,這個文件緊隨最初的 MainActivity.java 文件。

打開 DisplayMessageActivity.java ”,如果你使用的是Eclipse創(chuàng)建的它:

  • 這個類已經(jīng)包含了一個必須的 onCreate() 方法的實現(xiàn)
  • 同時還有 onCreateOptionsMenu() 方法的實現(xiàn),但在這個應(yīng)用中我們不需要它,所以你可以將它刪除
  • 同時還有一個 onOptionsItemSelected() 方法的實現(xiàn),這個方法處理標(biāo)題欄( Action Bar )的處理上一頁( Up )事件時的行為。我們保持它原有的樣子。

因為 ActionBar 的APIs僅在 HONEYCOMB (API Level 11)及更高的版本中才有,所以你必須在 getActionBar() 方法處添加一個條件判斷,用來檢查當(dāng)前的平臺版本。另外,你必須在 onCreate() 方法處添加一個標(biāo)簽:“ @SuppressLint("NewApi") ”,以此來避免 lint 錯誤。

現(xiàn)在, DisplayMessageActivity 看上去應(yīng)該是這樣的

      
        public
      
      
        class
      
       DisplayMessageActivity 
      
        extends
      
      
         Activity {



    @SuppressLint(
      
      "NewApi"
      
        )

    @Override

    
      
      
        protected
      
      
        void
      
      
         onCreate(Bundle savedInstanceState) {

        
      
      
        super
      
      
        .onCreate(savedInstanceState);

        setContentView(R.layout.activity_display_message);



        
      
      
        //
      
      
         Make sure we're running on Honeycomb or higher to use ActionBar APIs
      
      
        if
      
       (Build.VERSION.SDK_INT >=
      
         Build.VERSION_CODES.HONEYCOMB) {

            
      
      
        //
      
      
         Show the Up button in the action bar.
      
      

            getActionBar().setDisplayHomeAsUpEnabled(
      
        true
      
      
        );

        }

    }



    @Override

    
      
      
        public
      
      
        boolean
      
      
         onOptionsItemSelected(MenuItem item) {

        
      
      
        switch
      
      
         (item.getItemId()) {

        
      
      
        case
      
      
         android.R.id.home:

            NavUtils.navigateUpFromSameTask(
      
      
        this
      
      
        );

            
      
      
        return
      
      
        true
      
      
        ;

        }

        
      
      
        return
      
      
        super
      
      
        .onOptionsItemSelected(item);

    }

}
      
    

如果你使用的IDE不是Eclipse,使用上述代碼更新你的 DisplayMessageActivity 類。

所有 Activity 的子類必須實現(xiàn) onCreate() 方法。當(dāng)系統(tǒng)創(chuàng)建Activity的實例時,會調(diào)用這個方法。在這個方法中,你通過使用 setContentView() 方法定義 activity 的的布局,同時對 activity 的組件進(jìn)行初始化設(shè)置。

Note:

如果你使用的IDE不是Eclipse,你的項目工程將不會包括 setContentView() 所需要的布局文件 activity_display_message,這沒有關(guān)系,因為你馬上將會對這個方法進(jìn)行更新并且不再需要這個布局。

?

添加標(biāo)題字符

如果你使用的是Eclipse,你可以跳過這一節(jié),因為自動創(chuàng)建的模板為新的 activity 提供了標(biāo)題字符。

如果你使用的IDE不是Eclipse,在“ strings.xml ”添加新 activity 的標(biāo)題字符:

      
        <
      
      
        resources
      
      
        >
      
      
        

    ...

    
      
      
        <
      
      
        string 
      
      
        name
      
      
        ="title_activity_display_message"
      
      
        >
      
      My Message
      
        </
      
      
        string
      
      
        >
      
      
        </
      
      
        resources
      
      
        >
      
    

?

添加至清單

在你的清單文件 AndroidManifest.xml 中,所有 activity 必須通過使用一個 <activity> 標(biāo)簽 被聲明。

當(dāng)你使用Eclipse工具創(chuàng)建這個activity時,它會創(chuàng)建一個默認(rèn)的條目,如果你使用的不是Eclipse,你需要自己添加這個清單條目,修改后的結(jié)果如下:

      
        <
      
      
        application 
      
      
        ... 
      
      
        >
      
      
        

    ...

    
      
      
        <
      
      
        activity

        
      
      
        android:name
      
      
        ="com.example.myfirstapp.DisplayMessageActivity"
      
      
        

        android:label
      
      
        ="@string/title_activity_display_message"
      
      
        

        android:parentActivityName
      
      
        ="com.example.myfirstapp.MainActivity"
      
      
        >
      
      
        <
      
      
        meta-data

            
      
      
        android:name
      
      
        ="android.support.PARENT_ACTIVITY"
      
      
        

            android:value
      
      
        ="com.example.myfirstapp.MainActivity"
      
      
        />
      
      
        </
      
      
        activity
      
      
        >
      
      
        </
      
      
        application
      
      
        >
      
    

其中 android:parentActivityName 屬性字段聲明了在應(yīng)用的邏輯結(jié)構(gòu)中該 activity 的父 activity的名字。系統(tǒng)使用這一屬性值來實現(xiàn)默認(rèn)的導(dǎo)航行為,比如在Android 4.1版本(API Level 16)或更高版本中的 Up navigation 行為。你可以為較舊版本的Android系統(tǒng)提供相同的導(dǎo)航行為,這可以通過使用 Support Library 并且添加 <meta-data> 標(biāo)簽來實現(xiàn),如同此例所示。

? Note:

你的Android SDK應(yīng)該已經(jīng)擁有了最新的 Android Support Library,它包含在ADT中。但如果你用的是其他的IDE,你應(yīng)該在 Adding Platforms and Packages 這一步中已經(jīng)將它安裝好。當(dāng)在Eclipse中使用模板時,Support Library就被自動地添加到你的項目中了(你可以在 Android Dependencies 下看到這個庫的JAR文件)。如果你使用的不是Eclipse,你需要手動將它添加至你的項目,按照如下導(dǎo)引一步步執(zhí)行即可: setting up the Support Library 。

如果你使用的是Eclipse,你現(xiàn)在已經(jīng)可以運行這個應(yīng)用了,但是沒有什么事情發(fā)生。點擊發(fā)送按鈕會啟動第二個 Activity ,但是它使用的是默認(rèn)的“ Hello World ”模板作為布局。你很快就將更新這個activity,使它顯示一個自定義的文本框,若你使用的是其他IDE,不用擔(dān)心目前自己應(yīng)用還無法編譯的問題。

?

?

五).?接受Intent

無論用戶是如何被指引到那兒的,每個 Activity 都是被一個 Intent 啟動的。你可以通過調(diào)用 getIntent() 方法來獲得啟動你的 activity Intent ,進(jìn)而收回它所攜帶的數(shù)據(jù)。

DisplayMessageActivity 類中的的 onCreate() 方法里,提取由 MainActivity發(fā)送的數(shù)據(jù):

      Intent intent =
      
         getIntent();

String message 
      
      = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
    

?

六). 顯示消息

為了在屏幕上顯示消息,創(chuàng)建一個 TextView 控件,然后使用 setText() 方法設(shè)置它要顯示的文本。之后將 TextView 傳遞給 setContentView() ,這樣 TextView 就成為了這個activity的根View。

DisplayMessageActivity onCreate() 方法的完整代碼如下:

      
        @Override


      
      
        public
      
      
        void
      
      
         onCreate(Bundle savedInstanceState) {

    
      
      
        super
      
      
        .onCreate(savedInstanceState);



    
      
      
        //
      
      
         Get the message from the intent
      
      

    Intent intent =
      
         getIntent();

    String message 
      
      =
      
         intent.getStringExtra(MainActivity.EXTRA_MESSAGE);



    
      
      
        //
      
      
         Create the text view
      
      

    TextView textView = 
      
        new
      
       TextView(
      
        this
      
      
        );

    textView.setTextSize(
      
      40
      
        );

    textView.setText(message);



    
      
      
        //
      
      
         Set the text view as the activity layout
      
      
            setContentView(textView);

}
      
    

現(xiàn)在你可以運行這個應(yīng)用。當(dāng)它打開后,在文本框里輸入一些文字,點擊發(fā)送,然后這些文字將會在第二個 activity 中顯示出來。

圖2. 在Android4.0設(shè)備上的運行結(jié)果

?

就是這樣,你已經(jīng)構(gòu)建好了你的第一個應(yīng)用了!

【Android Developers Training】 4. 啟動另一個Activity


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 成人在线激情视频 | 最新国产午夜精品视频不卡 | 精品久久久日韩精品成人 | 国产精品videossex激情 | 欧美激情久久欧美激情 | 久久国产视频在线观看 | 男人猛躁女人成人免费视频 | 午夜伦4480yy妇女久久久 | 国产色吧 | 亚洲国产欧美在线 | 中文字幕日本一区波多野不卡 | 日本 欧美 国产 | 亚洲无线码一区在线观看 | 手机看片日韩高清国产欧美 | 99久久精品免费精品国产 | 四虎国产精品永久地址51 | 日韩亚洲精品不卡在线 | 色爽女| aa大片成人免费网站 | 亚洲欧美一区二区三区在线 | 2021国内精品久久久久影院 | 激情爱爱视频 | 久久天天躁夜夜躁狠狠85麻豆 | 国产精品久久久久久久网站 | 亚洲精品乱码久久久久久蜜桃欧美 | 欧美午夜在线播放 | 亚洲另类网 | 久一在线视频 | 成人免费午间影院在线观看 | 亚洲综合在线成人一区 | 好吊色妞 | 精品麻豆| 日韩欧美中文 | www国产精品 | 欧美特级一级毛片 | 亚洲国产精品婷婷久久久久 | 亚洲高清资源在线观看 | 激情综合视频 | 久久综合免费视频 | 欧美日韩中文字幕在线手机版本 | 久久国产精品视频一区 |