Android學習筆記(2)——使用Intent在Activity間傳遞


本例將說明如何在不同的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后,程序跳轉到發信息界面


 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM