Android基础知识_Activity之间传递参数
来源:互联网 发布:蓝月战魂进阶数据 编辑:程序博客网 时间:2024/05/19 02:04
运行绑定机制Intent在Android应用程序的开发中起着基础性的重要作用,在页面跳转、传递数据、调用外部程序时都会看到Intent的身影。编程时,一般通过Intent向Android系统发出某种请求,然后Android会根据请求查询各个组件声明的intent-filter,找到需要的组件并运行。
关于Intent的详细使用方法,会在后续的博文中详细写出。本博文主要通过1个工程 4个简单示例分别实现①传递简单数据、②传递数据包Bundle、③传递值对象、④获取Activity的返回参数。
示例工程SendArgsDemo的详细代码如下:
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" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <Button android:id="@+id/btnStartAty" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_marginTop="49dp" android:text="启动另一个Activity" /> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/btnStartAty" android:layout_centerHorizontal="true" android:layout_marginTop="77dp" android:text="TextView" /></RelativeLayout>activity_baty.xml另一个布局文件代码:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="20sp" android:text="TextView" /> <EditText android:id="@+id/editText" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" > <requestFocus /> </EditText> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Send Back" /></LinearLayout>MainActivity.java文件代码:
package com.example.sendargsdemo;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.TextView;public class MainActivity extends Activity {private TextView textView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);textView = (TextView)findViewById(R.id.textView);/* findViewById()取得布局上的Button控件, 处理单击事件 */findViewById(R.id.btnStartAty).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) { /* 参数v事件发生的事件源 *//* 第一个参数为context, 第二个参数为被启动的Activity的类的定义 */Intent intent = new Intent(MainActivity.this, BAty.class);///* 注释下面代码为: ①传递简单数据示例// * putExtra()传递参数// *///intent.putExtra("data", "Hello World!");///* 注释下面代码为: ②传递数据包Bundle示例// * 传递数据包Bundle// *///Bundle bundle = new Bundle();//bundle.putString("name", "SmallBundle");//bundle.putInt("age", 2);//bundle.putString("name1", "iwen");///* 方式一 */////intent.putExtras(bundle);///* 方式二 *///intent.putExtra("data", bundle);/* 注释下面代码为: ③传递值对象示例 * */intent.putExtra("user", new User("LiHua", 20));//startActivity(intent);/* 注释下面代码为: ④获取 Activity的返回参数 * *//* 接收被启动的Activity传回的参数 *//* 第二个参数为请求代码, 请求代码传递给第二个Activity, 由第二个Activity再把请求代码传回来, 通过请求代码确定本次请求的意义, 实际开发中很有用 */startActivityForResult(intent, 0);}});}/* 注释下面代码为: ④获取 Activity的返回参数 * */@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {// TODO Auto-generated method stubsuper.onActivityResult(requestCode, resultCode, data);textView.setText("另一个Activity返回的数据是: " + data.getStringExtra("data"));}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}BAty.java另一个Activity的文件代码:
package com.example.sendargsdemo;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.EditText;import android.widget.TextView;public class BAty extends Activity {private TextView tView;private EditText editText;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_baty);tView = (TextView)findViewById(R.id.tv);/* 注释下面代码为: ④获取 Activity的返回参数 * */editText = (EditText) findViewById(R.id.editText);/* BAty由Intent启动, 通过getIntent()方法获取与这个Activity相关的Intent */Intent intent = getIntent();///* 注释下面代码为: ②传递数据包Bundle示例// * 传递数据包Bundle// *////* 方式一 */////Bundle dataBundle = intent.getExtras();///* 方式二 *///Bundle dataBundle = intent.getBundleExtra("data");///* 注释下面代码为: ①传递简单数据示例// * 设置字符串:获取字符串名为data的数据// *///tView.setText(intent.getStringExtra("data"));///* 注释下面代码为: ②传递数据包Bundle示例// * *///tView.setText(String.format("name = %s, age = %d, name1 = %s", dataBundle.getString("name"), dataBundle.getInt("age"), dataBundle.getString("name1", "leo")));/* 注释下面代码为: ③传递值对象示例 * *//* 方式一: Serializable *///User user = (User)intent.getSerializableExtra("user");/* 方式二: Parcelable */User user = intent.getParcelableExtra("user");tView.setText(String.format("User info(name = %s, age = %d)", user.getName(), user.getAge()));/* 注释下面代码为: ④获取 Activity的返回参数 * */findViewById(R.id.button).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stub/* 第一个参数返回状态码, 第二个参数Intent对象 */Intent intent = new Intent();intent.putExtra("data", editText.getText().toString());setResult(1, intent);finish(); // 结束当前Activity}});}}User.java文件代码:
package com.example.sendargsdemo;import java.io.Serializable;import javax.xml.transform.Source;import android.os.Parcel;import android.os.Parcelable;/* 方式一: 使用Java语言内置序列化对象接口; * 特点: 操作简单, 序列化操作由系统完成, 速度慢 * *///public class User implements Serializable {/* 方式二: 使用Android平台提供的Parcelable序列化接口; * 特点: 操作复杂, 速度快 * */public class User implements Parcelable {private String name;private int age;public void setName(String name) {this.name = name;}public String getName() {return name;}public void setAge(int age) {this.age = age;}public int getAge() {return age;}public User(String name, int age) {this.name = name;this.age = age;}@Overridepublic int describeContents() {// TODO Auto-generated method stubreturn 0;}/* 系统自动执行此函数 */@Overridepublic void writeToParcel(Parcel dest, int flags) {// TODO Auto-generated method stubdest.writeString(getName());dest.writeInt(getAge());}public static final Creator<User> CREATOR = new Creator<User>() {/* 通过Parcel创建对象 */@Overridepublic User createFromParcel(Parcel source) {// TODO Auto-generated method stubreturn new User(source.readString(), source.readInt());}@Overridepublic User[] newArray(int size) {// TODO Auto-generated method stubreturn new User[size];}};}AndroidManifest.xml文件代码:
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.sendargsdemo" 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 android:name="com.example.sendargsdemo.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=".BAty" android:label="BAty" ></activity> </application></manifest>通过 Ctrl + / 解除相关注释内容,使4个示例分别运行在AVD中,可观察到实际效果。
0 0
- Android基础知识_Activity之间传递参数
- Android基础知识_Activity组件
- Android基础知识_Activity生命周期
- 第四次_Activity传递参数
- Android基础知识--3.在Activity之间传递参数
- Android基础知识_Activity启动模式
- Android基础知识_Activity标准启动模式示例
- Android基础知识_Activity SingleTop模式示例
- Android基础知识_Activity SingleTask模式示例
- Android基础知识_Activity SingleInstance模式示例
- android activity之间传递参数
- android activity之间传递参数
- android activity之间参数传递
- Android Activity之间参数传递
- Android中Activity之间传递参数
- android Activity之间的参数传递
- android fragement之间互相传递参数
- Android:Activity之间跳转和参数传递
- oracle 数据类型详解---日期型
- PowerPoint2007文本框无法输入中文处理措施
- codeforces #306 550B B. Preparing Olympiad(位压缩枚举)
- PPT制造电子相册
- 阶段总结
- Android基础知识_Activity之间传递参数
- [leetcode] 85.Maximal Rectangle
- 练习代码(五)接口与内部类(一)
- 两个栈实现一个队列
- 英语的原理∶用美国人的思维学英语
- Storm0.9.4安装
- EL表达式 非常详细
- Uva 10537 过路费(加强版) (Dijkstra)
- QT中的小问题总结!