- 浏览: 397016 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
lulu15634219680:
Eclipse设置行宽Maximum line width -
gakes:
有没有正确的啊
Android手机号码判断正则表达式 -
GhostFromheaven:
mooshadow 写道你好,首先感谢你的程序。我最近也碰到了 ...
java合并两个XML文件 -
mooshadow:
你好,首先感谢你的程序。我最近也碰到了这个问题,用了你的程序之 ...
java合并两个XML文件 -
sunnyting:
蛮靠谱!解决问题哈!
Android控制屏幕方向的改变
有很多时候都需要在不同的Activity之间传递数据。
实现方法有很多,可以用Bundle来传递,也可以用给Intent用putExtra传递附加参数。
当然也可以传递自定义类的对象。为了让自定义类可以在Activity之间传递,必须符合一些条件。常用的方法是自定义类实现Parcelable接口或Serializable接口。Android中建议实现Parcelable。
下面例子中两种方法都有例子。
传递Parcelable过去,再传递Serializable回来。
WeightParcelable.java
HeightSerializable.java
EX03_10.java
EX03_10_1.java
可以都加入String.其实它内部是用map实现的,是key-value对。
实现方法有很多,可以用Bundle来传递,也可以用给Intent用putExtra传递附加参数。
当然也可以传递自定义类的对象。为了让自定义类可以在Activity之间传递,必须符合一些条件。常用的方法是自定义类实现Parcelable接口或Serializable接口。Android中建议实现Parcelable。
下面例子中两种方法都有例子。
传递Parcelable过去,再传递Serializable回来。
WeightParcelable.java
import android.os.Parcel; import android.os.Parcelable; public class WeightParcelable implements Parcelable { private String sex; private double height; //必须的空构造器,因为下面有一个私有的构造器,否则不能new对象 public WeightParcelable() { } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public double getHeight() { return height; } public void setHeight(double height) { this.height = height; } @Override public int describeContents() { return 0; } //需要覆盖的方法 @Override public void writeToParcel(Parcel out, int flags) { out.writeString(sex); out.writeDouble(height); } //关键的事情 public static final Parcelable.Creator<WeightParcelable> CREATOR = new Parcelable.Creator<WeightParcelable>() { public WeightParcelable createFromParcel(Parcel in) { return new WeightParcelable(in); } public WeightParcelable[] newArray(int size) { return new WeightParcelable[size]; } }; // private WeightParcelable(Parcel in) { sex = in.readString(); height = in.readDouble(); } }
HeightSerializable.java
import java.io.Serializable; public class HeightSerializable implements Serializable { private static final long serialVersionUID = 8502706820090766507L; private String sex; private double weight; public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public double getWeight() { return weight; } public void setWeight(double weight) { this.weight = weight; } }
EX03_10.java
import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.RadioButton; import android.widget.TextView; public class EX03_10 extends Activity { /** Called when the activity is first created. */ public static final String parcelableKey = "irdc.ex03_10.parcelableKey"; public static final String seralizableKey = "irdc.ex03_10.seralizableKey"; private static final String TAG = "EX03_10"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button b1 = (Button) findViewById(R.id.button1); b1.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { EditText et = (EditText) findViewById(R.id.height); double height = Double.parseDouble(et.getText().toString()); String sex = ""; RadioButton rb1 = (RadioButton) findViewById(R.id.sex1); if (rb1.isChecked()) { sex = "M"; } else { sex = "F"; } Intent intent = new Intent(); intent.setClass(EX03_10.this, EX03_10_1.class); Bundle bundle = new Bundle(); WeightParcelable wp = new WeightParcelable(); wp.setSex(sex); wp.setHeight((int) height); bundle.putParcelable(parcelableKey, wp); intent.putExtras(bundle); //注意这里 startActivityForResult(intent, 1); } }); } //这个是关键 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { Log.d(TAG, "onActivityResult requestCode=" + requestCode + " resultCode= " + resultCode + " data == null[" + (data == null) + "]"); super.onActivityResult(requestCode, resultCode, data); if (requestCode == 1) { if (resultCode == RESULT_OK) { try { HeightSerializable hs = (HeightSerializable) data .getSerializableExtra(seralizableKey); TextView textView4 = (TextView) findViewById(R.id.text4); textView4.setText("性别:" + hs.getSex() + "\n标准体重:" + hs.getWeight()); } catch (Exception e) { e.printStackTrace(); } } } } }
EX03_10_1.java
import java.text.DecimalFormat; import java.text.NumberFormat; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.widget.TextView; public class EX03_10_1 extends Activity { private static final String TAG = "EX03_10_1"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.myalyout); WeightParcelable wp = (WeightParcelable) getIntent() .getParcelableExtra(EX03_10.parcelableKey); String sex = wp.getSex(); double height = wp.getHeight(); String sexText = ""; if (sex.equals("M")) { sexText = "男性"; } else { sexText = "女性"; } String weight = this.getWeight(sex, height); TextView tv1 = (TextView) findViewById(R.id.text1); tv1.setText("性别:" + sexText + "\n身高:" + height + "厘米\n标准体重: " + weight + "公斤"); // 返回对象 Intent data = new Intent(); HeightSerializable hs = new HeightSerializable(); hs.setSex(sexText); hs.setWeight(Double.valueOf(weight)); data.putExtra(EX03_10.seralizableKey, hs); //从这里返回对象 setResult(RESULT_OK, data); } private String format(double num) { NumberFormat formatter = new DecimalFormat("0.00"); String s = formatter.format(num); return s; } private String getWeight(String sex, double height) { String weight = ""; if (sex.equals("M")) { weight = format((height - 80) * 0.7); } else { weight = format((height - 70) * 0.6); } return weight; } }
评论
3 楼
GhostFromheaven
2011-05-21
whao189 写道
我有个问题。。想 请教一下。。
是这样的
@Override
public void writeToParcel(Parcel out, int flags) {
out.writeString(sex);
out.writeDouble(height);
}
private WeightParcelable(Parcel in) {
sex = in.readString();
height = in.readDouble();
}
这个地方如果 sex height 的类型 都是一样 的 加入都是string 怎么 处理呢??
你在readString 的 时候 Parcel会帮你 自动的 比对数据么?
希望楼主能指点一二!
是这样的
@Override
public void writeToParcel(Parcel out, int flags) {
out.writeString(sex);
out.writeDouble(height);
}
private WeightParcelable(Parcel in) {
sex = in.readString();
height = in.readDouble();
}
这个地方如果 sex height 的类型 都是一样 的 加入都是string 怎么 处理呢??
你在readString 的 时候 Parcel会帮你 自动的 比对数据么?
希望楼主能指点一二!
可以都加入String.其实它内部是用map实现的,是key-value对。
2 楼
whao189
2011-05-19
我有个问题。。想 请教一下。。
是这样的
@Override
public void writeToParcel(Parcel out, int flags) {
out.writeString(sex);
out.writeDouble(height);
}
private WeightParcelable(Parcel in) {
sex = in.readString();
height = in.readDouble();
}
这个地方如果 sex height 的类型 都是一样 的 加入都是string 怎么 处理呢??
你在readString 的 时候 Parcel会帮你 自动的 比对数据么?
希望楼主能指点一二!
是这样的
@Override
public void writeToParcel(Parcel out, int flags) {
out.writeString(sex);
out.writeDouble(height);
}
private WeightParcelable(Parcel in) {
sex = in.readString();
height = in.readDouble();
}
这个地方如果 sex height 的类型 都是一样 的 加入都是string 怎么 处理呢??
你在readString 的 时候 Parcel会帮你 自动的 比对数据么?
希望楼主能指点一二!
1 楼
windloverain
2010-12-01
不错,学习了,一会试试。
发表评论
-
Android获取sdcard信息
2011-04-04 22:11 40361>实例代码: if (Environ ... -
Android获取通话状态
2011-04-04 21:08 73281>添加读取手机状态的权限 <uses-pe ... -
Android 系统服务getSystemService
2011-04-02 21:04 3824public Object getSystemService ... -
Android获取SIM卡信息--TelephonyManager
2011-04-02 19:37 83631>获得TelephonyManager Telepho ... -
Android获取、设置Wifi状态
2011-04-02 19:14 54411>获得WifiManager WifiManager ... -
Android获取、设置桌面
2011-04-02 18:57 15321>添加权限 <uses-permission ... -
Android SQLite学习工具
2011-03-27 19:01 1256Android自带数据库SQLite,是一个超级迷你,但是五脏 ... -
自定义程序实现Android EditText只允许输入指定字符
2011-03-24 19:18 7310程序设计的很多地方都要用到一个小技术:指定文本框的输入类型。即 ... -
Android EditText禁止输入中文字符
2011-03-24 16:51 27392只允许EditText输入数字或者email格式字符是非常简 ... -
Android控制屏幕方向的改变
2011-03-19 16:05 9651目前大多数手机都支持 重力感应 ,随之而来的就是屏幕 ... -
Android 自定义拨打电话程序段
2011-03-17 14:09 1991strInput = "13912345 ... -
java合并两个XML文件
2010-09-13 15:59 9996package cs.edu.hust.cs.j2 ... -
sss
2010-09-09 12:09 0getWindow().setFlags(WindowMana ... -
android 邮件地址正则表达式
2010-09-07 20:24 1903public static boolean isEma ... -
正则表达式需要转义的字符
2010-09-07 20:08 8307$ ---> \$ ( ---> \ ... -
Android手机号码判断正则表达式
2010-09-07 19:26 10008public static boolean isPho ... -
Android发送短信与邮件
2010-09-07 19:14 3173发送短信: 注意引入包的时候,应该是: import andr ... -
Android TabHost动态加载内容总结
2010-09-02 16:16 5813前面用继承TabActivity的方法很好的完成了,TabHo ... -
Android TabHost使用、动态加载内容
2010-09-02 16:03 7641使用TabHost有两种办法 1.在layout的xml文件里 ... -
Android Activity间传递对象startActivityForResult、onActivityResult、setResult总结
2010-09-01 13:12 4870前面做了在Activity之间传递参数的测试。 setResu ...
相关推荐
综上所述,要理解并实现Android中Parcelable序列化自定义类集合在Activity间传递,开发者需要掌握Parcelable接口的使用、自定义类的Parcelable实现、集合处理、Intent数据传递,以及可能借助的源码阅读和辅助工具。...
传递自定义Java对象到JNI层则相对复杂,因为需要处理对象引用和对象内部的数据。首先,你需要使用`FindClass`方法获取Java类的本地表示,然后通过`NewObject`创建实例。对于传递的对象,需要定义对应的结构体来存储...
本示例主要探讨如何通过AIDL实现自定义对象的远程传递,这在多进程协作或服务通信中非常常见。 首先,我们需要了解AIDL的基本概念。AIDL文件是一种接口定义文件,它允许我们声明方法签名,这些方法将在服务和客户端...
当我们需要在Intent中传递自定义对象时,Android提供了几种方式来实现这一功能,其中一种常用的方法是将自定义对象转换为Serializable接口的实现。以下我们将详细探讨如何通过Intent传递自定义对象以及涉及到的相关...
在Android开发中,Activity之间的数据传递是常见的操作,特别是在处理图像数据时,如Bitmap对象。Bitmap是Android系统中用于表示图像的重要类,它包含了图像的所有像素信息。在不同Activity之间传递Bitmap,通常是...
在DEMO Trans Object中,通常会展示如何创建一个自定义类,实现Parcelable接口,并在Activity之间通过Intent传递这个自定义对象。DEMO可能包括以下步骤: 1. 创建自定义类并实现Parcelable接口。 2. 在自定义类中...
1、从Activity的TextView中获取字符串设置到AlertDialog的TextView和EditText中 2、将AlertDialog的EditText中的值设置到Activity的TextView中 新手在自定义AlertDialog上的疑问笔者猜测主要有两个: 1、自定义的...
对于性能要求较高的场景,可以使用实现Parcelable接口的自定义对象作为参数传递。Parcelable比Serializable效率更高,但编写代码相对复杂。示例: ```java public class CustomObject implements Parcelable { // ...
// 声明自定义对象为Parcelable interface IAidlInterface { void passObject(MyObject obj); // 定义传递对象的方法 } ``` 这里的`MyObject`必须实现`Parcelable`接口,这是Android系统中唯一能跨进程传递的...
在Eclipse环境下开发Android应用时,理解并掌握Activity之间的值传递至关重要。本文将详细探讨在Eclipse下如何进行Android Activity的值传递。 首先,Activity之间的值传递主要通过Intent对象实现。Intent不仅用于...
这个"Android例子源码Activity间的数据传递"着重展示了如何在不同的Activity之间有效地传递数据。以下是关于这个主题的详细解释: 1. **Intent**: Intent是Android中用于启动其他组件(如Activity、Service)或传递...
如果需要传递复杂对象,如自定义类实例,那么这个类需要实现Parcelable接口或Serializable接口。Parcelable是更高效的数据序列化方式,适合频繁传递数据;而Serializable接口相对简单,但效率较低。对于Parcelable...
为了让自定义对象能够通过Intent传递,我们需要让该类实现Parcelable接口。实现这个接口需要编写以下方法: 1. `public int describeContents()`:返回当前对象的内存引用,通常返回0。 2. `public void ...
Intent是Android中用来启动Activity或Service的类,也可以用于在Activity间传递数据。对于简单的数据类型(如字符串、整型、浮点型、布尔型等),我们可以在创建Intent时直接附加数据。 例如,在`LoginActivity....
- **Parcelable接口**:对于自定义对象,可以实现Parcelable接口,使其能够作为Intent的额外数据进行传递。这种方式效率较高,但编写代码相对复杂。 - **Serializable接口**:另一种传递复杂数据的方式是实现...
1. **创建可序列化的对象**:确保你要传递的自定义类实现了Serializable接口。例如,我们有一个User类: ```java public class User implements Serializable { private String name; private int age; // 构造...
当PopupWindow需要向Activity传递数据时,只需调用已实现的接口方法即可。这样做的好处是保持了PopupWindow和Activity之间的解耦。 3. **静态变量**:创建全局静态变量,可以方便地在PopupWindow和Activity之间共享...
首先,Intent是Android系统用于启动新Activity或服务的类,它是Activity间通信的主要桥梁。在传递数据时,我们可以创建一个Intent对象,然后使用putExtra()方法添加键值对,将数据存储到Intent的Extras中。例如: `...
可以传递基本类型、Parcelable接口实现类(如自定义对象)、Serializable接口实现类等。以下是一个简单的示例: ```java // 在启动新Activity时通过Intent传递数据 Intent intent = new Intent(this, TargetActivity...