彰化一整天的論壇

 找回密碼
 立即註冊
查看: 830|回復: 0

[Android] Android開發教學 - 開啟其它的Activity

[複製鏈接]
發表於 2016-1-28 21:49:35 | 顯示全部樓層 |閱讀模式
正常來說,一個App會包含多個Activity,也就是有許多的畫面,

這章節會教導如何切換Activity。

首先當然是加入其他的Activity,在Java資料夾底下點選右鍵,並新增新的Activity



這裡我們選擇加入一個Empty Activity,此時,Android Studio自動幫我們做了三件事


1.在AndroidManifest.xml定義了新的Activity

2.在Java資料夾中,增加了Main2Activity.java

3.在layout資料夾中,增加了activity_main2.xml

若是你使用的IDE沒有做這三件事,就必須補完這三件事,此外,若是你想要刪除這頁

你就必須把這三件事都做完

1.將AndroidManifest.xml裡面定義的Activity移除

2.刪除Java資料夾中的頁面

3.刪除layout資料夾中的xml

接著我們在第一頁加入一個Button,並且實作onClick界面。

當按下這個Button之時,會切換到第二頁。

接著要來介紹一下一個新的物件。

Intent,這是一個Android相當重要的物件,許多地方都會用到,而其中一個功能就是開啟另一個Activity。

接著你可以將你的程式碼打成以下的樣子

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //取得此Button的實體
        button = (Button)findViewById(R.id.button);
        //實做OnClickListener界面
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //初始化Intent物件
                Intent intent = new Intent();
                //從MainActivity 到Main2Activity
                intent.setClass(MainActivity.this , Main2Activity.class);
                //開啟Activity
                startActivity(intent);
            }
        });
    }




view rawgistfile1.java hosted with ❤ by GitHub




將Intent物件初始化,並使用setClass方法來設定你要前往的Activity。

要丟入兩個參數,假設你要從A頁到B頁。

就必須輸入 intent.setClass(A.this , B.class);

然而,你可能會在某些地方的範例看到直接在前面輸入this,可是你也這樣輸入卻有錯誤訊息跳出。

這個原因是因為我們寫在new View.OnClickListener()之中,在這裡面寫的this是指這個View.OnClickListener物件,而不是這整個MainActivity的物件,雖然看起來是在同一頁寫的,但是本質上不太一樣。

如果你還是想要寫this就好,可以將這換頁的事件整個搬出去寫,然後當按鈕按下時在去呼叫即可,此時你的程式碼可能會像這樣。

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //取得此Button的實體
        button = (Button)findViewById(R.id.button);
        //實做OnClickListener界面
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startNextPage();
            }
        });
    }
    /**
     * 開啟Main2Activity之用
     *
     */
    private void startNextPage(){
        Intent intent = new Intent();
        intent.setClass(this , Main2Activity.class);
        startActivity(intent);
    }




view rawaaaa.java hosted with ❤ by GitHub




接著,你可能會想要從第一頁帶一些資料到第二頁去。

如果只是一些,可以使用putExtra來達成。

是使用Key - Value形式來儲存的。

如果對這種儲存方式不熟悉的話,可以看一下以下的例子。

intent.putExtra("Name" , "Tom");

前者是Key 後者是 Value,

假如你想取得Tom這個值的話,你就必須要使用Name這個Key來取得。

pueExtra可以傳送大部分的物件給下一頁,舉例來說。

    private void startNextPage(){
        Intent intent = new Intent();
        intent.putExtra("Name" , "Tom");
        intent.putExtra("Year" , 12);
        intent.setClass(this , Main2Activity.class);
        startActivity(intent);
    }




view raw.java hosted with ❤ by GitHub




這個例子我們儲存了Name Year到下一頁,那麼,下一頁該怎麼取得呢?

你可以這樣取得。

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        //取得上一頁傳過來的 Key為Name的 Value
        String Name = getIntent().getStringExtra("Name");
        //取得上一頁傳過來的 Key為Year的 Value , 若是沒值則為0
        int Year = getIntent().getIntExtra("Year" , 0);
    }




view raw.java hosted with ❤ by GitHub



使用getIntent()可以拿到上一頁傳過來的Intent,並透過get來取得上一頁傳過來的值,

有些值必須填入預設值,當上一頁沒有傳值過來的話,必須要有預設值。

此外,也可以將這些值全部都放入Bundle之中,之後你的程式可以改為以下。

    private void startNextPage(){
        Intent intent = new Intent();
        Bundle bundle = new Bundle();
        bundle.putString("Name" , "Tom");
        bundle.putInt("Year", 12);
        intent.putExtra("Bundle" , bundle);
        intent.setClass(this , Main2Activity.class);
        startActivity(intent);
    }




view raw.java hosted with ❤ by GitHub




而取值也必須改成這樣。

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        //取得上一頁傳過來的 Key為Bundle的 Value
        Bundle bundle = getIntent().getBundleExtra("Bundle");
        //取得bundle裡的 Key為Name的 Value
        String Name = bundle.getString("Name");
        //取得bundle裡的 Key為Year的 Value , 若是沒值則為0
        int Year = bundle.getInt("Year", 0);
    }




view raw.java hosted with ❤ by GitHub




並沒有強制說要用哪種形式比較好,可以根據個人喜好來決定。

根據此章節你應該能稍微了解Activity切換與傳值。

文章來源: http://aiur3908.blogspot.tw/2015/11/android-android-activity.html

回復

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

 ㄚ母滴雞湯
 員林香純滴雞精

Archiver|手機版|小黑屋|彰化一整天的論壇(Excel,Office)  |网站地图

GMT+8, 2019-8-23 21:11 , Processed in 0.133173 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表