只有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,然後直接用我註釋的程式碼。
效果