1. 程式人生 > >只有MainActivity怎麼夠?教你如何啟動另一個Activity

只有MainActivity怎麼夠?教你如何啟動另一個Activity

學習Android這段時間以來,我一直在考慮如何開啟另一個Activity的事情,可是某人和我說這不重要,很簡單,你先學增刪改需要用到的東西,先把單頁面學流暢了,再來弄這個。
既然他說簡單,那我才有動力嘛,今天研究了一下,果然也不是費神的事兒。
上週升級了AndroidStudio2.0,以後在官方未升級之前都用這個版本來學習。
這篇文章裡需要達到的目的是: 在主Activity中點選一個按鈕,跳轉到另一個Activity,並顯示前一個Activity中EditText的值。

建立第二個Activity

一、新建一個工程My Application3,在layout目錄下新建activity_2.xml。

二、在MainActivity.java同目錄下新建TwoActivity.java,基本構造如下,包含onCreate函式,可參照MainActivity.java。

package com.my.asus.myapplication3;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;

/**
 * Created by Asus on 2016/4/21.
 */
public class TwoActivity extends AppCompatActivity {
    @Override
public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_2); } }

宣告所有Activity

三、開啟AndroidManifest.xml,新增如下程式碼,不宣告所有Activity,可能會出現閃退的情況。元素聲明瞭TwoActivity的父activity的名稱。

        <activity
            android:name
=".TwoActivity" android:label="@string/title_TwoActivity">
<meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".MainActivity"/> </activity>

新增按鈕點選事件

四、開啟layout/activity_main.xml,新增一個EditText和一個Button,併為Button新增onClick屬性。

   <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/editText" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Click me"
        android:id="@+id/Click_Button"
        android:layout_marginTop="58dp"
        android:onClick="sendMessage"/>

建立Intent

Intent 是一個訊息傳遞物件,您可以使用它從其他應用元件請求操作。儘管 Intent可以通過多種方式促進元件之間的通訊,但其基本用例主要包括以下三個:

啟動 Activity: Activity 表示應用中的一個螢幕。通過將 Intent 傳遞給startActivity(),您可以啟動新的 Activity 例項。Intent 描述了要啟動的 Activity,並攜帶了任何必要的資料。 如果您希望在 Activity 完成後收到結果,請呼叫 startActivityForResult()。在 Activity 的 onActivityResult() 回撥中,您的
Activity 將結果作為單獨的 Intent 物件接收。如需瞭解詳細資訊,請參閱Activity指南。
啟動服務: Service
……
傳遞廣播:
……

五、MainActivity.java中新增sendMessage函式,用來呼應xml中的onClick=”sendMessage”,建立Intent,並啟動第二個Activity。
一個Intent可以攜帶各種各樣型別的資料集,使用putExtra()函式來傳遞。

    public void sendMessage(View v){
        Intent intent=new Intent(this , TwoActivity.class);
        EditText editText=(EditText) findViewById(R.id.editText);
        String message=editText.getText().toString();
        intent.putExtra(EXTRA_MESSAGE,message);
        startActivity(intent);
    }

六、建立第五步中報錯的EXTRA_MESSAGE,這個是為了在另一個Activity中查詢到傳遞過來的值。在MainActivity頂部定義一個公共常量EXTRA_MESSAGE

public class MainActivity extends AppCompatActivity {
    public final static String EXTRA_MESSAGE="com.my.asus.myapplication3.MESSAGE";
    ……
    }

接收Intent 並顯示傳遞的值

七、開啟TwoActivity.java,並加入如下程式碼。

public class TwoActivity extends AppCompatActivity {
    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_2);

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

        TextView textView=new TextView(this);
        textView.setTextSize(40);
        textView.setText(message);
        setContentView(textView);

//        TextView textView=(TextView) findViewById(R.id.two_tV);
//        textView.setText(message);

    }
}

使用getIntent()來接收MainActivity中使用的Intent,定義一個String用來接收EXTRA_MESSAGE的值,並顯示出來。這裡既可以在程式碼中寫TextView,也可以到xml中建立一個TextView,然後直接用我註釋的程式碼。

效果

這裡寫圖片描述 這裡寫圖片描述