Intent尋找目標組件的兩種方式:
一.顯式Intent
一般情況下,一個Android應用程序中需要多個屏幕,即是多個Activity類,並且在這些Activity之間進行切換通過Intent機制來實現的。在同一個應用程序中切換Activity時,我們通常都知道要啟動的Activity具體是哪一個,因此常用顯式的Intent來實現的。
下面的例子是在同一應用程序中MainActivity啟動SecondActivity,下面的代碼中,主要是為“轉到SecondActivity”按鈕添加了OnClickListener,使得按鈕被點擊時執行onClick()方法,onClick()方法中則利用了Intent機制,來啟動SecondActivity,關鍵的代碼是22~25行。
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="@string/hello1"
- />
- <Button
- android:id="@+id/btn"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="轉到SecondActivity"
- />
- </LinearLayout>
second.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="@string/hello2"
- />
- <Button
- android:id="@+id/secondBtn"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="返回"
- />
- </LinearLayout>
MainActivity.java
- package com.android.test.activity;
- 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 {
- private Button btn;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- btn = (Button)findViewById(R.id.btn);
- //響應按鈕btn事件
- btn.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- //顯示方式聲明Intent,直接啟動SecondActivity
- Intent it = new Intent(MainActivity.this,SecondActivity.class);
- //啟動Activity
- startActivity(it);
- }
- });
- }
- }
SecondActivity.java
- package com.android.test.activity;
- 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 SecondActivity extends Activity {
- private Button secondBtn;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.second);
- secondBtn=(Button)findViewById(R.id.secondBtn);
- //響應按鈕secondBtn事件
- secondBtn.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- //顯示方式聲明Intent,直接啟動MainActivity
- Intent intent = new Intent(SecondActivity.this,MainActivity.class);
- //啟動Activity
- startActivity(intent);
- }
- });
- }
- }
AndroidManifest.xml清單文件,16~18行為SecondActivity在清單文件裡的聲明
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.android.test.activity"
- android:versionCode="1"
- android:versionName="1.0">
- <uses-sdk android:minSdkVersion="10" />
- <application android:icon="@drawable/icon" android:label="@string/app_name">
- <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>
- <activity android:name=".SecondActivity"
- android:label="@string/app_name">
- </activity>
- </application>
- </manifest>
效果圖:
650) this.width=650;" height=120>650) this.width=650;" height=120>