安卓開發05:Activity之間連結和傳遞參數

來源:互聯網
上載者:User

Activity之間連結和傳遞參數主要通過Intent安卓的一個對象來實現。

首先我們建立一個MainActivity:

 

package com.example.androidtest;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.util.Log;import android.view.View;import android.view.Window;import android.widget.Toast;/** * 安卓入口檔案 * @author zhuli.zhul * @date 2013 2013-6-5 下午3:09:14 */public class MainActivity extends Activity {    private String tag          = "MainActivity";    private int    request_code = 1;    /**     * 頁面配置     */    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        requestWindowFeature(Window.FEATURE_NO_TITLE);        setContentView(R.layout.activity_main); //設定一個View模板        Log.d(tag, "In the onCreate() event");    }    /**     * 點擊開啟一個新的Activity頁面     * @param view     */    public void onClickStartActivity(View view) {        Log.d(tag, "onClickStartActivity");        //下面可以傳遞參數,以及點擊後,開啟一個新的Activity        Intent i = new Intent("android.intent.action.OpenActivity");        i.putExtra("str", "這個是傳遞一個參數");        i.putExtra("int", 100);        startActivityForResult(i, request_code);    }    /**     * 監控開啟的Activity頁面關閉後回傳的參數     */    public void onActivityResult(int requestCode, int resultCode, Intent data) {        Toast.makeText(getBaseContext(), data.getData().toString(), Toast.LENGTH_SHORT).show();    }}

同時在layout檔案夾下建立一個布局檔案activity_main.xml

 

 

<?xml version="1.0" encoding="utf-8"?>  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"      android:layout_width="fill_parent"      android:layout_height="fill_parent"      android:orientation="vertical" >            <Button      android:id="@+id/btn_dialogs"      android:layout_width="fill_parent"       android:layout_height="wrap_content"      android:text="@string/startActivity"      android:onClick="onClickStartActivity" />     </LinearLayout> 

 

點擊布局頁面上的按鈕後,就會觸發onClickStartActivity方法,該方法會啟動一個OpenActivity:

同時我們傳遞了str和int參數過去。

 

    /**     * 點擊開啟一個新的Activity頁面     * @param view     */    public void onClickStartActivity(View view) {        Log.d(tag, "onClickStartActivity");        //下面可以傳遞參數,以及點擊後,開啟一個新的Activity        Intent i = new Intent("android.intent.action.OpenActivity");        i.putExtra("str", "這個是傳遞一個參數");        i.putExtra("int", 100);        startActivityForResult(i, request_code);    }

 

建立一個OpenActivity:

OpenActivity中,建立了一個布局的頁面,並且布局頁面中,有通過訊息的方式輸出MainActivity的參數

並且OpenActivity中,有一個OnClick方法,主要用來點擊布局頁面上的一個按鈕後觸發,並且OnClick方法主要操作就是返回MainActivity,並且傳遞參數“Hello World”到MainActivity

 

package com.example.androidtest;import android.app.Activity;import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.util.Log;import android.view.View;import android.view.Window;import android.widget.Toast;public class OpenActivity extends Activity {    /**     * 頁面配置     */    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        requestWindowFeature(Window.FEATURE_NO_TITLE);        setContentView(R.layout.activity_open); //設定一個View模板        Log.d("SECOND", "In the onCreate() event");        //捕獲MainActivity開啟該Activity後 接收傳遞過來的參數        String str = getIntent().getStringExtra("str");        Toast.makeText(getBaseContext(), str, Toast.LENGTH_SHORT).show();        int i = getIntent().getIntExtra("int", 0);        Toast.makeText(getBaseContext(), "年齡是:" + i, Toast.LENGTH_SHORT).show();    }    /**     * 點擊按鈕事件後,返回MainActivity頁面     * @param view     */    public void onClick(View view) {        Intent data = new Intent();        data.setData(Uri.parse("Hello World"));        setResult(1, data);        finish();    }}

 

建立一個布局檔案activity_open:

 

<?xml version="1.0" encoding="utf-8"?>  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"      android:layout_width="fill_parent"      android:layout_height="fill_parent"      android:orientation="vertical" >    <AnalogClock        android:id="@+id/analogClock1"        android:layout_width="wrap_content"        android:layout_height="wrap_content" />        <Button        android:id="@+id/btn_dialogs"        android:layout_width="fill_parent"         android:layout_height="wrap_content"        android:text="@string/progressDialog"        android:onClick="onClick" />     </LinearLayout> 

修改AndroidManifest.xml:

 

新增或者修改Activity都需要在AndroidManifest.xml中進行相關修改:

 

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.example.androidtest"    android:versionCode="1"    android:versionName="1.0" >    <uses-sdk        android:minSdkVersion="8"        android:targetSdkVersion="17" />    <application        android:allowBackup="true"        android:icon="@drawable/ic_launcher"        android:label="@string/app_name"        android:theme="@style/AppTheme" >        <!-- 預設的Activity -->        <activity            android:name="com.example.androidtest.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 -->        <activity            android:name=".OpenActivity"            android:label="Open Activity" >            <intent-filter>                <action android:name="android.intent.action.OpenActivity" />                <category android:name="android.intent.category.DEFAULT" />            </intent-filter>        </activity>    </application></manifest>

 

說明:

開啟新的Activity和傳遞參數:

 

        Intent i = new Intent("android.intent.action.OpenActivity");        i.putExtra("str", "這個是傳遞一個參數");        i.putExtra("int", 100);        startActivityForResult(i, request_code);

接收傳遞的參數:

 

 

        //捕獲MainActivity開啟該Activity後 接收傳遞過來的參數        String str = getIntent().getStringExtra("str");        Toast.makeText(getBaseContext(), str, Toast.LENGTH_SHORT).show();        int i = getIntent().getIntExtra("int", 0);        Toast.makeText(getBaseContext(), "年齡是:" + i, Toast.LENGTH_SHORT).show();

開啟的Activity結束關閉後並傳遞參數到前一個Activity:

 

 

     Intent data = new Intent();        data.setData(Uri.parse("Hello World")); //傳遞參數        setResult(RESULT_OK, data); //傳遞參數 RESULT_OK - 狀態  data - 具體參數        finish();

監聽回調的參數:

 

 

    /**     * 監控開啟的Activity頁面關閉後回傳的參數     */    public void onActivityResult(int requestCode, int resultCode, Intent data) {        //requestCode 是startActivityForResult 傳遞的request_code,用於區分一個頁面上開啟的不同的Activity        //resultCode 是setResult(RESULT_OK, data) 中的RESULT_OK 這個參數,主要是回調的資料狀態        //data就是傳遞的資料        if (requestCode == request_code) {            if (resultCode == RESULT_OK) {                Toast.makeText(getBaseContext(), data.getData().toString(), Toast.LENGTH_SHORT).show();            }        }      }

 

 

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.