Android Studio 單刷《第一行代碼》系列 03 —— Activity 基礎


前情提要(Previously)

本系列將使用 Android Studio 將《第一行代碼》(書中講解案例使用Eclipse)刷一遍,旨在為想入坑 Android 開發,並選擇 Android Studio 作為開發 IDE 的同學開路。
PS:其實我就是現學現賣,希望我能堅持刷完。

在 Day 1、Day 2,我們創建了第一個App project,並分析了項目結構、運行原理,實踐了 LogCat 的使用。

系列目錄在此:

摘要(Abstract)

Activity 是 一個 App 的臉面,而這又是一個看臉的世界,那就讓我們從臉開始吧。這篇都是基礎的羅列,沒有什么值得注意的地方。

Activity 的基本用法

跟着書走,先創建一個 ActivityTest 的項目,注意在選擇 Activity 的時候,選擇 Add No Activity。如下圖

no activity

創建活動

在 app/src/mani/java/com.xxx.ActivityTest 目錄上點擊右鍵 → New,這里有兩種選擇:

  • 選擇 Java Class,新建一個名為 FirstActivity 的類,並 extends Activity,重寫 onCreate() 方法。代碼可以參考之前的 HelloWorld。
  • 選擇 Activity,系統會生成一個 Activity,以及相關的布局文件 Layout,並在 AndroidManifest.xml 中注冊。

如下圖

new activity

創建和加載布局

新創建好的項目是沒有 Layout 目錄的,在 app/src/main/res 目錄上點右鍵 → New → Android resource directory,在彈出的對話框中將 Resource type 選為 layout。

然后在 res/Layout 目錄上點右鍵 → New → Layout resource file,在彈出的對話框中填上名字,Finish,這樣就創建好了。

打開文件,可以向里面添加一個 Button 控件試試看。

注冊

Activity 必須在 AndroidManifest.xml 文件中注冊才可以使用,代碼如下:

    <activity
        android:name=".FirstActivity"
        android:label="FirstActivity" >
    </activity>

如果想讓其在 App 運行時打開,還需要添加 intent-filter,代碼如下:

        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

隱藏標題欄

在 Activity 的 onCreate()方法中添加 requestWindowFeature(Window.FEATURE_NO_TITLE);

PS:在這里我遇到個坑,我創建的繼承 Activity 的 活動默認就不顯示標題欄,而且我也不知道怎么能讓標題欄顯示出來。

消息提示 Toast

Toast 是 Android 提供的一種非常好的提醒方式,在程序中可以使用她將一些短小的信息通知給用戶,這些信息會在一段時間后自動消失。

例子是這樣的,在 onCreate() 方法中,給 Button 綁定一個點擊事件,再點擊 Button 時顯示一條信息,代碼如下:

    Button button1 = (Button) findViewById(R.id.button_1);
    button1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(FirstActivity.this, "you clicked button 1", Toast.LENGTH_SHORT).show();
        }
    });

PS:我多么希望 HTML 中也有這樣的元素啊。

我真心覺得 Menu 沒什么好講的。

Activity 跳轉

創建一個名為 SecondActivity 的 Activity(好繞口)。

例子是這樣的,在 FirstActivity 中點擊 Button 后跳轉到 SecondActivity。代碼如下:

    button1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
            startActivity(intent);
        }
    });

傳遞數據

例子是這樣的,在 FirstActivity 中點擊 Button 后跳轉到 SecondActivity,並將一個字符串傳過去。
1.FirstActivity 中發送代碼如下:

    Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
    String data = "hello second";
    intent.putExtra("extra_data", data);
    startActivity(intent);

2.SecondActivity中,在 onCreate() 方法中,接收代碼如下:

    Intent intent = getIntent();
    String data = intent.getStringExtra("extra_data");

返回數據

需要用 startActivityForResult() 來代替 startActivity() 方法。

例子是這樣的,在 FirstActivity 中點擊 Button 后跳轉到 SecondActivity,然后點擊返回鍵返回到 FirstActivity,並返回一個字符串。

1.FirstActivity 中發送代碼如下:

    startActivityForResult(intent, 1);

其中的第二個參數 requestCode,用於在之后的回調方法中判斷數據的來源。要保證在當前 Activity 中的唯一性。

2.SecondActivity中,重寫點擊返回鍵時觸發的 onBackPressed() 方法,代碼如下:

@Override
public void onBackPressed(){
    Intent intent = new Intent();
    intent.putExtra("data_return","hello first");
    setResult(RESULT_OK, intent);
    finish();
}

3.當從 SecondActivity 返回時,會回調上一個活動的 onActivityResult() 方法,所以需要重寫 FirstActivity 的 onActivityResult() 方法來獲取返回的數據,代碼如下:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {
        case 1:
            if (resultCode == RESULT_OK) {
                String returnedData = data.getStringExtra("data_return");
                Log.d("FirstActivity", returnedData);
            }
            break;
        default:
    }
}

其它(Miscellaneous)

盡管我試圖在本文中盡量完整的進行描述,但受限於篇幅和我的個人水平,本文難免有所遺漏,歡迎在評論中指出。
如果您覺得閱讀本文對您有幫助,請點一下“推薦”按鈕,您的“推薦”將是我最大的寫作動力!

關於作者(About Me)

addict
原文鏈接:http://www.cnblogs.com/DebugLife/p/4349428.html

本文謝絕轉載,如需轉載需征得作者本人同意,謝謝。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM