欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

【Android Developers Training】 4. 啟動(dòng)另一

系統(tǒng) 1908 0

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

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


?一. 啟動(dòng)另一個(gè)Activity

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

?

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

為了響應(yīng)按鈕點(diǎn)擊事件,打開(kāi)布局文件 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 中的一個(gè)方法的名字,當(dāng)用戶(hù)點(diǎn)擊這個(gè)按鈕時(shí),系統(tǒng)會(huì)調(diào)用這個(gè)方法。

打開(kāi) MainActivity 類(lèi)(在項(xiàng)目工程的 /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 類(lèi):

      
        import
      
       android.view.View;
    

Tip:

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

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

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

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

?

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

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

sendMessage() 這一方法中,創(chuàng)建一個(gè)新的 Intent 來(lái)啟動(dòng)另一個(gè)稱(chēng)之為 DisplayMessageActivity 的Activity:

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

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

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

Note:

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

一個(gè) Intent 不僅僅只能允許你啟動(dòng)另一個(gè) Activity ,它還能附帶有一些數(shù)據(jù)給這個(gè) Activity ,在 sendMessage() 這一方法中,使用 findViewById() 這個(gè)方法來(lái)獲取 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 。稍后你將會(huì)定義 EXTRA_MESSAGE 常量。

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

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

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

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

      
        public
      
      
        class
      
       MainActivity 
      
        extends
      
      
         Activity {

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

    ...

}
      
    

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

?

三). 啟動(dòng)第二個(gè)Activity

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

加上了新的代碼后,被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)在你需要?jiǎng)?chuàng)建 DisplayMessageActivity 類(lèi)使得它能夠正確運(yùn)行。

?

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

使用Eclipse創(chuàng)建第二個(gè)類(lèi):

  1. 在工具欄中點(diǎn)擊“ New
  2. 在出現(xiàn)的窗口中,打開(kāi) Android ”文件夾,選擇 Android Activity ”,點(diǎn)擊 Next
  3. 選擇 BlankActivity , 點(diǎn)擊 Next
  4. 填寫(xiě)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

點(diǎn)擊 Finish

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

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

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

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

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

現(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 類(lèi)。

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

Note:

如果你使用的IDE不是Eclipse,你的項(xiàng)目工程將不會(huì)包括 setContentView() 所需要的布局文件 activity_display_message,這沒(méi)有關(guān)系,因?yàn)槟泷R上將會(huì)對(duì)這個(gè)方法進(jìn)行更新并且不再需要這個(gè)布局。

?

添加標(biāo)題字符

如果你使用的是Eclipse,你可以跳過(guò)這一節(jié),因?yàn)樽詣?dòng)創(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 必須通過(guò)使用一個(gè) <activity> 標(biāo)簽 被聲明。

當(dāng)你使用Eclipse工具創(chuàng)建這個(gè)activity時(shí),它會(huì)創(chuàng)建一個(gè)默認(rèn)的條目,如果你使用的不是Eclipse,你需要自己添加這個(gè)清單條目,修改后的結(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)使用這一屬性值來(lái)實(shí)現(xiàn)默認(rèn)的導(dǎo)航行為,比如在Android 4.1版本(API Level 16)或更高版本中的 Up navigation 行為。你可以為較舊版本的Android系統(tǒng)提供相同的導(dǎo)航行為,這可以通過(guò)使用 Support Library 并且添加 <meta-data> 標(biāo)簽來(lái)實(shí)現(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中使用模板時(shí),Support Library就被自動(dòng)地添加到你的項(xiàng)目中了(你可以在 Android Dependencies 下看到這個(gè)庫(kù)的JAR文件)。如果你使用的不是Eclipse,你需要手動(dòng)將它添加至你的項(xiàng)目,按照如下導(dǎo)引一步步執(zhí)行即可: setting up the Support Library 。

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

?

?

五).?接受Intent

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

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

      Intent intent =
      
         getIntent();

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

?

六). 顯示消息

為了在屏幕上顯示消息,創(chuàng)建一個(gè) TextView 控件,然后使用 setText() 方法設(shè)置它要顯示的文本。之后將 TextView 傳遞給 setContentView() ,這樣 TextView 就成為了這個(gè)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ùn)行這個(gè)應(yīng)用。當(dāng)它打開(kāi)后,在文本框里輸入一些文字,點(diǎn)擊發(fā)送,然后這些文字將會(huì)在第二個(gè) activity 中顯示出來(lái)。

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

?

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

【Android Developers Training】 4. 啟動(dòng)另一個(gè)Activity


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

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦?。?!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 夫妻性生活交换 | 男女免费视频网站 | 欧美视频一区 | 日韩福利视频导航 | 欧美经典成人在观看线视频 | 宝贝jojo第三季 | 国产片侵犯亲女视频播放 | 欧美一级黄色网 | 欧美日韩在线观看免费 | jizz日本zzz日本护士 | 色99视频 | yeyelu| 99成人精品视频 | 国产精品久久久久久久久久日本 | 国产成人高清视频免费播放 | 三级黄色片网站 | av免费在线免费观看 | 偷偷狠狠的日日高清完整视频 | 日韩一区二区三区视频 | 韩国三级中文字幕hd久久精品 | 精品久久久久不卡无毒 | 天天怕夜夜怕狠狠怕 | 91网站免费观看直播 | 亚洲第一在线 | 国产毛片久久精品 | 自偷自拍三级全三级视频 | 99国产在线视频有精品视频 | 99热在线免费观看 | 日韩三级伦理在线 | 在线观看的av | 99精品在线免费观看 | 一区二区三区免费看 | 亚洲国产精品久久 | 欧美日韩亚洲综合另类ac | 欧美图片激情小说 | a在线免费观看 | 一区二区三区四区不卡视频 | 一区二区三区四区国产精品视频 | 欧美成人在线免费观看 | 在线成人av观看 | 美女羞羞网站妖精视频 |