Android深入淺出系列之執行個體應用—如何在一個Activity裡調用另外一個Activity?

來源:互聯網
上載者:User

  在“手機頁面之間的跳轉”一文中我介紹了如何運用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。

  

  

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.