- 浏览: 394395 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
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 39871>实例代码: if (Environ ... -
Android获取通话状态
2011-04-04 21:08 72891>添加读取手机状态的权限 <uses-pe ... -
Android 系统服务getSystemService
2011-04-02 21:04 3789public Object getSystemService ... -
Android获取SIM卡信息--TelephonyManager
2011-04-02 19:37 82621>获得TelephonyManager Telepho ... -
Android获取、设置Wifi状态
2011-04-02 19:14 54061>获得WifiManager WifiManager ... -
Android获取、设置桌面
2011-04-02 18:57 14971>添加权限 <uses-permission ... -
Android SQLite学习工具
2011-03-27 19:01 1211Android自带数据库SQLite,是一个超级迷你,但是五脏 ... -
自定义程序实现Android EditText只允许输入指定字符
2011-03-24 19:18 7268程序设计的很多地方都要用到一个小技术:指定文本框的输入类型。即 ... -
Android EditText禁止输入中文字符
2011-03-24 16:51 27358只允许EditText输入数字或者email格式字符是非常简 ... -
Android控制屏幕方向的改变
2011-03-19 16:05 9600目前大多数手机都支持 重力感应 ,随之而来的就是屏幕 ... -
Android 自定义拨打电话程序段
2011-03-17 14:09 1954strInput = "13912345 ... -
java合并两个XML文件
2010-09-13 15:59 9932package cs.edu.hust.cs.j2 ... -
sss
2010-09-09 12:09 0getWindow().setFlags(WindowMana ... -
android 邮件地址正则表达式
2010-09-07 20:24 1842public static boolean isEma ... -
正则表达式需要转义的字符
2010-09-07 20:08 8254$ ---> \$ ( ---> \ ... -
Android手机号码判断正则表达式
2010-09-07 19:26 9955public static boolean isPho ... -
Android发送短信与邮件
2010-09-07 19:14 3127发送短信: 注意引入包的时候,应该是: import andr ... -
Android TabHost动态加载内容总结
2010-09-02 16:16 5767前面用继承TabActivity的方法很好的完成了,TabHo ... -
Android TabHost使用、动态加载内容
2010-09-02 16:03 7601使用TabHost有两种办法 1.在layout的xml文件里 ... -
Android Activity间传递对象startActivityForResult、onActivityResult、setResult总结
2010-09-01 13:12 4838前面做了在Activity之间传递参数的测试。 setResu ...
相关推荐
NULL 博文链接:https://2528.iteye.com/blog/1849692
1、从Activity的TextView中获取字符串设置到AlertDialog的TextView和EditText中 2、将AlertDialog的EditText中的值设置到Activity的TextView中 新手在自定义AlertDialog上的疑问笔者猜测主要有两个: 1、自定义的...
我们有时由于程序某种需要,可能需要传递各种各样的自定义对象,只传递简单类型的数据是不够的。但这些对象在Activity之间不能直接传递,用什么方法去解决? 方法一:将一个公共类作为对象传输中介,但安全性差,...
Android中的不同Activity之间传递对象,我们可以考虑采用Bundle.putSerializable(Key,Object);也可以考虑采用Bundle.putParcelable(Key, Object);其中前面一种方法中的Object要实现Serializable接口,后面一种方法中...
在应用中,可能会在当跳转到另外一个Activity的时候需要传递数据过去,这时就可能用Bundle对象; 在MainActivity中,有一个导航至BActivity的Intent, Intent 代码如下:{ Intent intent = new Intent(Context ...
在Activity间传递的数据一般比较简单,但是有时候实际开发中也会传一些比较复杂的数据,本节一起来学习更多Activity间数据的传递方法。 1、通过 Intent 传递 我们在进行 Activity 跳转时,是要有 Intent,此时 ...
相信Intent的用法大家已经比较熟悉了,Intent可以用来启动Activity,Service等等,同时我们也可以通过Intent来进行传递数据,当我们使用Intent在Activity 间传递信息时发现putExtra() 方法并不支持自定义对象的传输...
首先是Intent自定义数据的传送,之后银行账号的输入格式的控制,之后界面销毁时数据的返回,将跟新了的数据返回给上一层的activity
Android的设计原则是,用Intent在不同的Activity和进程之间进行通信,但是通常来讲,Intent中只能存入基本数据类型和系统默认支持的比如Uri之类的。那么对于用户自己定义的数据结构是无法直接用Intent来传送的,如果...
import android.app.Activity; import android.content.Context; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.widget.Button; import ...
在Android开发过程中,经常要在Activity之间传递参数,使用Android系统提供的方法可以传递基本数据类型的变量,但有时候我们经常要传递一些复杂的数据类型或自定义的类,这种情况的参数无法直接传递,我们可以通过...
加载一个Activity肯定不会像加载一般的类那样,因为activity作为系统的组件有自己的生命周期,有系统的很多回调控制,所以自定义一个DexClassLoader类加载器来加载插件中的Activity肯定是不可以的。 首先不得不了解...
该项目的主要功能是如何自定义Dialog,并通过接口回调的方式把参数传递到activity或者Fragment,主要强调的是一种思想,同时,也阐述了如何改变一个字符串中某部分文字的颜色,需要的小伙伴可以下载
3.2.2 Activity类的结构 3.3 Activity的两种界面设计方式 3.3.1 基于XML的界面设计 3.3.2 基于代码的界面设计 3.4 应用实例:在界面中显示图片 第4章 Android人机界面和常用组件 4.1 用户人机界面元素分类 4.1.1 ...
13.3.6 组件间参数传递 343 本章小结 347 第14章 Broadcast Receiver和Notification 348 14.1 Broadcast Receiver 348 14.1.1 音频播放案例 349 14.1.2 编写音频播放Broadcast Receiver 350 14.1.3 注册音频...
----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance ...
7.5.3 自定义补间动画 298 7.6 使用SurfaceView实现动画 300 7.6.1 SurfaceView的绘图机制 301 7.7 本章小结 305 第8章 Android的数据存储和IO 306 8.1 使用SharedPreferences 307 8.1.1 ...