您的位置:首页 > 其它

安卓开发05:Activity之间链接和传递参数

2013-06-05 21:25 489 查看
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();
}
}
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: