zoukankan      html  css  js  c++  java
  • 调用另一个Activity

    《转》调用另一个Activity

    Intent对象的使用

    范例说明

    前一个范例介绍了如何运用切换Layout的方式,进行手机页面间的转换。如果要转换的页面并不单只是背景、颜色或文字内容的不同,而是Activity的置换,那就不是单单改变Layout就能完成的,尤其是需要传递的变量不像网页可以通过Cookie或Session,在程序里要移交主控权到另外一个Activity,光靠先前的Layout技巧是办不到的。

    那要如何解决Activity控制权的移交呢?在Android的程序设计中,可在主程序里使用startActivity() 这个方法来调用另一个Activity(主程序本身即是一个Activity),但当中的关键并不在startActivity这个方法,而是Intent这个特有的对象,Intent就如同其英文字义,是"想要"或"意图"之意,在主Activity当中,告诉程序自己是什么,并想要前往哪里,这就是Intent对象所处理的事了。本范例并没有特别的Layout布局,而是直接在主Activity(Activity1)当中部署一个按钮,当点击按钮的同时,告诉主Activity前往Activity2,并在Activity2里创建一个回到Activity1的按钮,本范例将利用此简易的程序描述,示范如何在一个Activity中调用另一个Activity的手法。

    运行结果

     
    (点击查看大图)图3-9  在两个Activity间做切换

    范例程序

    1. src/irdc.ex03_09/EX03_09.java

    主程序中加载的Layout为main.xml,屏幕上显示的是黑色背景的"This is Activity 1!!",在Button被点击时调用另一个Activity(EX03_09_1,参考AndroidManifest.xml里的说明),并将主Activity关闭finish(),接着将主控权交给下一个Activity,即Activity2。

     1 package irdc.ex03_09;  
     2  
     3 /* import相关class */ 
     4 import android.app.Activity;  
     5 import android.os.Bundle;  
     6 import android.view.View;  
     7 import android.widget.Button;  
     8 import android.content.Intent;  
     9  
    10 public class EX03_09 extends Activity  
    11 {  
    12   /** Called when the activity is first created. */ 
    13   @Override 
    14   public void onCreate(Bundle savedInstanceState)   
    15   {  
    16     super.onCreate(savedInstanceState);  
    17     /* 载入main.xml Layout */ 
    18     setContentView(R.layout.main);  
    19       
    20     /* 以findViewById()取得Button对象,并添加onClickListener */ 
    21     Button b1 = (Button) findViewById(R.id.button1);  
    22     b1.setOnClickListener(new Button.OnClickListener()  
    23     {  
    24       public void onClick(View v)  
    25       {  
    26         /* new一个Intent对象,并指定要启动的class */ 
    27         Intent intent = new Intent();  
    28         intent.setClass(EX03_09.this, EX03_09_1.class);  
    29           
    30         /* 调用一个新的Activity */ 
    31         startActivity(intent);  
    32         /* 关闭原本的Activity */ 
    33         EX03_09.this.finish();  
    34       }  
    35     });  
    36   }  
    37 }  
    38 src/irdc.ex03_09/EX03_09_1.java 

    EX03_09_1.java程序是第二个Activity的主程序,其加载的Layout为mylayout.xml,屏幕上所显示的是白色背景的"This is Activity 2!!",当主Activity(Activity1)调用这个Activity(Activity2)后,同样为Button添加onClickListener(),使Button被点击时,重新调用Activity1(EX03_09),并将Activity2(EX03_09_1)关闭(finish())。

    package irdc.ex03_09;  
     
    /* import相关class */ 
    import android.app.Activity;  
    import android.os.Bundle;  
    import android.content.Intent;  
    import android.view.View;  
    import android.widget.Button;  
     
    public class EX03_09_1 extends Activity  
    {  
      /** Called when the activity is first created. */ 
      @Override 
      public void onCreate(Bundle savedInstanceState)   
      {  
        super.onCreate(savedInstanceState);  
        /* 载入mylayout.xml Layout */ 
        setContentView(R.layout.mylayout);  
          
        /* 以findViewById()取得Button对象,并添加onClickListener */ 
        Button b2 = (Button) findViewById(R.id.button2);  
        b2.setOnClickListener(new Button.OnClickListener()  
        {  
          public void onClick(View v)  
          {  
            /* new一个Intent对象,并指定要启动的class */ 
            Intent intent = new Intent();  
            intent.setClass(EX03_09_1.this, EX03_09.class);  
              
            /* 调用一个新的Activity */ 
            startActivity(intent);  
            /* 关闭原本的Activity */ 
            EX03_09_1.this.finish();  
          }  
        });  
          
      }  
    }  
    res/layout/main.xml 

    为了凸显Activity间切换的效果,特别将两个Layout的背景及输出文字有所区别。在main.xml中定义其背景色为黑色,输出文字为"This is Activity 1!!"。

    1. <?xml version="1.0" encoding="utf-8"?>  
      <AbsoluteLayout  
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent" 
        android:background="@drawable/black" 
        xmlns:android="http://schemas.android.com/apk/res/android" 
      >  
        <TextView  
          android:id="@+id/text1" 
          android:textSize="24sp" 
          android:layout_width="186px" 
          android:layout_height="29px" 
          android:layout_x="70px" 
          android:layout_y="32px" 
          android:text="@string/act1" 
        >  
        </TextView>  
        <Button  
          android:id="@+id/button1" 
          android:layout_width="118px" 
          android:layout_height="wrap_content" 
          android:layout_x="100px" 
          android:layout_y="82px" 
          android:text="Go to Activity2" 
        >  
        </Button>  
      </AbsoluteLayout>  
      res/layout/mylayout.xml 

    在mylayout.xml中定义其背景色为白色,输出文字为"This is Activity 2!!"。

    1. <?xml version="1.0" encoding="utf-8"?>  
      <AbsoluteLayout  
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent" 
        android:background="@drawable/white" 
        xmlns:android="http://schemas.android.com/apk/res/android" 
      >  
        <TextView  
          android:id="@+id/text2" 
          android:textSize="24sp" 
          android:layout_width="186px" 
          android:layout_height="29px" 
          android:layout_x="70px" 
          android:layout_y="32px" 
          android:textColor="@drawable/black" 
          android:text="@string/act2" 
        >  
        </TextView>  
        <Button  
          android:id="@+id/button2" 
          android:layout_width="118px" 
          android:layout_height="wrap_content" 
          android:layout_x="100px" 
          android:layout_y="82px" 
          android:text="Go to Activity1" 
        >  
        </Button>  
      </AbsoluteLayout>  
      AndroidManifest.xml 

    由于本范例中添加了一个Activity,所以必须在AndroidManifest.xml中定义一个新的activity,并给予名称name,否则程序将无法编译运行。

       

    <?xml version="1.0" encoding="utf-8"?>  
    <manifest  
      xmlns:android="http://schemas.android.com/apk/res/android" 
      package="irdc.ex03_09" 
      android:versionCode="1" 
      android:versionName="1.0.0">  
      <application  
        android:icon="@drawable/icon" 
        android:label="@string/app_name">  
        <activity  
          android:name=".EX03_09" 
          android:label="@string/app_name">  
          <intent-filter>  
            <action android:name="android.intent.action.MAIN" />  
            <category android:name="android.intent.category.LAUNCHER" />  
          </intent-filter>  
        </activity>  
        <activity android:name="EX03_09_1"></activity>  
      </application>  
    </manifest> 

    扩展学习

    当系统中新添加Activity时,必须在AndroidManifest.xml里定义一个新的activity:

      

    <activity android:name="EX03_09_1"></activity> 

    否则系统将会因为找不到Activity而发生编译错误。

    另外,当程序中出现两个以上的Activity时,系统要如何决定主程序是哪一支(entry point)呢?以本范例来说,AndroidManifest.xml中Activity EX03_09的定义如下:

      

    <activity android:name=".EX03_09" 
      android:label="@string/app_name">  
      <intent-filter>  
        <action android:name="android.intent.action.MAIN" />  
        <category android:name="android.intent.category.LAUNCHER" />  
      </intent-filter>  
    </activity> 

    其中有一行为 <category android:name="android.intent.category.LAUNCHER" />,这就代表程序启动时,会先运行EX03_09这个Activity,而非EX03_09_1。需注意的是,这个参数必须要被定义,如果xml中没有一支Activity有设置这个参数,则程序将不会被运行。

    此外,在两支Java程序中的最后一行都调用了finish() 这个方法,它代表这个Activity已运作完毕,当系统接收到这个命令时,即会关闭此Activity,所以此时点击模拟器的返回(Back)键,并不会回到上一个Activity的画面,如果要让模拟器的返回键有回上一页的效果,可以将此行程序注释掉。同理,当两个Activity在切换时,并非真的只有两个Activity在切换,而是在点击按钮时,再重新调用起一个新的Activity。

  • 相关阅读:
    C++ static 几点总结
    Coursera-An Introduction to Interactive Programming in Python (Part 1)-Mini-project #4 —"Pong"
    Coursera-An Introduction to Interactive Programming in Python (Part 1)-Mini-project #3 —"Stopwatch: The Game"
    Coursera-An Introduction to Interactive Programming in Python (Part 1)-Mini-project — “Guess the number” game
    Coursera-An Introduction to Interactive Programming in Python (Part 1)-Mini-project— Rock-paper-scissors-lizard-Spock
    Coursera-C程序设计进阶-编程题#1:单词翻转
    Coursera-C程序设计进阶-编程题#4:Tomorrow never knows?
    多项式加法
    Cordova/Ionic 开发安卓Android如何调试?
    Web Api 之 404 Resource Not Found 错误消息封装
  • 原文地址:https://www.cnblogs.com/McCa/p/4497928.html
Copyright © 2011-2022 走看看