在“手機頁面之間的跳轉”一文中我介紹了如何運用setContentView()方法切換布局檔案Layout的方式進行手機頁面間的跳轉, 這種適合更改背景,文字顏色,文字內容,但是始終是一個Activity,如果要把主控權移交給另外一個Activity,切換布局檔案Layout的方式就辦不到了。
如何把主控權移交給另外一個Activity呢?原理:通過Intent對象和startActivity()方法配合來實現。在主程式裡使用startActivity()方法調用另外一個Activity,但是最主要的不是這個startActivity()方法,而是Intent對象,Intent在英文中是“意圖”的意思,在主Activity當中,告訴程式自己是什麼,並想要前往哪裡,這就是Intent對象要做的事情了。在主Activity(ActivityOne)裡放置一個按鈕,當單擊這個按鈕的時候,告訴主Activity(ActivityOne)前往ActivityTwo,並在ActivityTwo裡放置一個回到主Activity(ActivityOne)的一個按鈕。
實現步驟
一:布局檔案編寫
1.1:第一個布局檔案main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="我是ActivityOne"
/>
<Button
android:id="@+id/mainbtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="調用ActivityTwo"
/>
</LinearLayout>
1.2:第二個布局檔案two.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="我是ActivityTwo"
/>
<Button
android:id="@+id/twobtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="調用ActivityOne"
/>
</LinearLayout>
二:代碼檔案編寫
2. 1:MainActivity.java
package com.menglin.callactivity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity
{
//聲明一個Button對象
private Button mainbtn = null;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
//載入main.xml布局檔案
setContentView(R.layout.main);
//以findViewById()方法取得Button對象
mainbtn = (Button)findViewById(R.id.mainbtn);
//給Button對象綁定單擊監聽事件
mainbtn.setOnClickListener(listener);
}
//監聽事件
private OnClickListener listener = new OnClickListener()
{
@Override
public void onClick(View v)
{
//建立一個intent對象
Intent intent = new Intent();
//指定原本的class和要啟動的class
intent.setClass(MainActivity.this, TwoActivity.class);
//調用另外一個新的Activity
startActivity(intent);
//關閉原本的Activity
MainActivity.this.finish();
}
};
}
2. 2:TwoActivity.java
package com.menglin.callactivity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity
{
//聲明一個Button對象
private Button twobtn= null;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
//載入two.xml布局檔案
setContentView(R.layout.two);
//以findViewById()方法取得Button對象
twobtn= (Button)findViewById(R.id.twobtn);
//給Button對象綁定單擊監聽事件
twobtn.setOnClickListener(listener);
}
//監聽事件
private OnClickListener listener = new OnClickListener()
{
@Override
public void onClick(View v)
{
//建立一個intent對象
Intent intent = new Intent();
//指定原本的class和要啟動的class
intent.setClass(TwoActivity.this, MainActivity.class);
//調用另外一個新的Activity
startActivity(intent);
//關閉原本的Activity
TwoActivity.this.finish();
}
};
}
三:設定檔
AndroidMainfest.xml
1:當系統中新添加了一個Activity時,必須在AndroidMainfest.xml裡定義一個新的Activity,由於我們新建立了TwoActivity.java,所以我們需要在AndroidMainfest.xml裡加上如下代碼,如果不加的話,系統會因為找不到Activity而發生編譯性錯誤。
<activity android:name=".TwoActivity"
android:label="@string/app_name">
</activity>
2:當程式中出現了兩個Activity時,系統要決定主程式是哪一支,所以我們需要在AndroidMainfest.xml裡定義如下代碼,這個參數必須要被定義,如果不加的話,則程式不會被運行。
其中<category android:name="android.intent.category.LAUNCHER" />,就代表了程式啟動時,會運行MainActivity而非TwoActivity。
<activity android:name=".MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
注意
1:在這兩個java檔案中最後一行都調用了finish()方法,它代表了這個Activity已運作完畢,當系統收到這個命令後,就會關閉次Activity,所以你此時單擊模擬器上的返回鍵,並不會回到上一個Activity的畫面,如果要讓單擊模擬器上的返回鍵能回到上一個Activity的畫面,可以將finish()方法注釋掉。
2:當這兩個Activity在來回切換時,並非真的有兩個Activity在切換,而是在單擊按鈕時重新調用了一個新的Activity。
運行效果如下
當我們單擊ActivityOne當中的按鈕後,就會把Activity的主控權從ActivityOne移交給ActivityTwo,然後當我們單擊ActivityTwo當中的按鈕後,就會把Activity的主控權從ActivityTwo移交給ActivityOne。