本例將說明如何在不同的Activity間切換,並可借助Intent進行值的傳遞:
Activity(一個Android程序由多個Activity組成):
布局文件res/layout/*.xml,前台頁面布局
Activity類函數src/com*包/*.java,后台業務邏輯
AndroidManifest.xml程序配置文件,注冊Activity
為了演示多個Activity間的切換,我們首先new幾個Activity:
————————————————MainActivity:————————————————
布局(res/layout/activity_main.xml):
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:text="@string/hello_world" /> <Button android:id="@+id/myButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="false" android:layout_centerVertical="true" android:text="@string/hello_world" />" </RelativeLayout>
button的id為myButton,
TextView和Button的text屬性賦值為R.java中對應string/hello_world鍵的值:(R.java記錄了所有鍵值對的引用,包括布局layout,圖片drawable,string鍵值等等,R.java不可手動更改其內容,在操作res下的文件時,系統自動生成)
后台業務邏輯(src/com.example.activity_02.MainActivity.java):
package com.example.activity_02; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; /** * 主Activity */ public class MainActivity extends Activity { private Button myButton=null; @Override /** * 重寫onCreate */ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //設置布局文件 //根據R.java中登記的id查找控件 myButton=(Button)findViewById(R.id.myButton ); //綁定監聽到button上 myButton.setOnClickListener(new MyButtonListener()); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_main, menu); return true; } /** * button的點擊監聽類 */ class MyButtonListener implements OnClickListener{ @Override public void onClick(View v) { //生成一個Intent對象 Intent intent =new Intent(); //附加數據Extras intent.putExtra("textIntent", "123"); //Intent請求的是OtherActivity.class intent.setClass(MainActivity.this, OtherActivity.class); MainActivity.this.startActivity(intent); } } }
使用findViewById獲取和設置頁面布局中的控件(需要有id),
使用內部類的方式,設置button控件的點擊事件監聽setOnClickListener,
重寫button的Click事件,生成一個Intent對象,使用他的Extra附帶一個鍵值對("textIntent","123"),設置要切換去的Activity是OtherActivity(稍后new),動作是startActivity啟動另一個Activity,
Intent: 一個請求(包含很多信息)
- Component name:決定去啟動哪一個Activity
- Action:啟動了那個Activity之后,我要做什么
- Data:從一個Activity想要向另一個Activity傳送什么數據
- Category:
- Extras:額外信息(鍵值對),可從一個Activity傳送到另一個Activity取出來
- Flags:
配置文件AndroidManifest.xml
<activity android:name="com.example.activity_02.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>
注冊MainActivity的信息(系統會默認生成主Activity的注冊,並設置為啟動Activity)
————————————————OtherActivity:————————————————
布局(res/layout/other.xml):
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <TextView android:id="@+id/myTextView" android:layout_width="fill_parent" android:layout_height="wrap_content"/> </LinearLayout>
TextView的id為myTextView,
后台業務邏輯(src/com.example.activity_02.OtherActivity.java):
package com.example.activity_02; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.widget.TextView; /** * 另一個Activity */ public class OtherActivity extends Activity { private TextView myTextView=null; @Override /** * 重寫onCreate */ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //設置布局文件,根據R.java中登記的layout布局文件id setContentView(R.layout.other); //獲取由上一個Activity傳遞過來的Intent對象 Intent intent=getIntent(); //獲取這個Intent對象的Extra中對應鍵的值 String value=intent.getStringExtra("textIntent"); //獲取、設置TextView的文本值 myTextView=(TextView)findViewById(R.id.myTextView); myTextView.setText(value); } }
使用setContentView來設置布局文件,
在getIntent對象之后,獲取Intent從上一個Activity傳過來的鍵值"textIntent"的值,放在myTextView中,
配置文件AndroidManifest.xml
<activity android:name=".OtherActivity" android:label="@string/other" />
注冊OtherActivity
啟動ADV模擬器,運行效果如下:
點擊MainActivity主界面中的button按鈕,
顯示另一個Activity界面,並顯示從前一個界面傳來的值"123"
不同的Activity間切換,可以是不同程序的不同Activity,例如修改主界面MainActivity中button點擊處理如下:
/** * button的點擊監聽類 */ class MyButtonListener implements OnClickListener{ @Override public void onClick(View v) { // //生成一個Intent對象 // Intent intent =new Intent(); // // //附加數據Extras // intent.putExtra("textIntent", "123"); // // //Intent請求的是OtherActivity.class // intent.setClass(MainActivity.this, OtherActivity.class); // MainActivity.this.startActivity(intent); Uri uri=Uri.parse("smsto://0800000123"); Intent intent =new Intent(Intent.ACTION_SENDTO,uri); intent.putExtra("sms_body", "The SMS text"); startActivity(intent); }
需要導入包import android.net.Uri;
重新Debug,效果如下:
當點擊主界面MainActivity中的button后,程序跳轉到發信息界面