Activity通信-传递对象、集合总结
来源:互联网 发布:ubuntu下安装jdk9 编辑:程序博客网 时间:2024/04/18 07:45
前言
最近工作中有用到在activity之间传递对象、集合的需要,当时还百度了一下网上的说法。但都大同小异,最主要都是通过实现Serializable,Parcelable接口完成,本文会总结这种常规做法,并且总结一些新的思路。
传递对象方式:
1:对象实现Pacelable接口(Android独有,更高效)2:对象实现Serializable接口3:把数据转成json格式的字符串传递,接收方再解析成对象4:把对象拆分基本数据属性传递,接收方再生成对象5:利用静态属性,或者把值存在两边都能取到的地方6:利用sharedPreferences7:广播...
上面所说的方式里边,像数据转化json、利用静态属性、sharedpreferences这些方法在集合中同样适用。
传递集合的方式(非String对象)
1:对象实现Parcelable接口2:集合强转Serializable,接收端用getSerializableExtra()方法再强转3:集合转成数组(list.toArray(Parcelable[])),接收端用intent.getParcelableArrayExtra()获取4:利用循环把集合元素拆分成一个个Serializable、或者Parcelable对象发送,接收端同样用循环获取5:上面说的对象时通用的几种方式。
但效率最高的是用Parcelable、其次是Serializable。
以下是一个小demo,挑几种方式实践:
发送端:
/** 页面传递信息的方式总结: * 基本类型的不做总结,主要是对象传输、以及最主要的集合* */public class MainActivity extends AppCompatActivity { Intent intent ; ParcelableModel parcelableModel = new ParcelableModel("李四",30); SerializableModel serializableModel = new SerializableModel("张三", 20); NormalModel normalModel = new NormalModel("正常人",1); ArrayList<ParcelableModel> mListParcelableModel = new ArrayList<>(); List<SerializableModel> mListSerializableModel = new ArrayList<>(); ArrayList<NormalModel> mListNormalModel = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); intent = new Intent(this, ReceiveValueActivity.class); mListParcelableModel.add(parcelableModel); mListParcelableModel.add(new ParcelableModel("李武", 31)); mListSerializableModel.add(serializableModel); mListSerializableModel.add(new SerializableModel("张4",21)); mListNormalModel.add(normalModel); mListNormalModel.add(new NormalModel("正常人2号", 3)); } public void btnPutData(View view) { puObject(); putList(); } /* * 传递对象方式: * 1:对象实现Pacelable接口(Android独有,更高效) * 2:对象实现Serializable接口 * 3:把数据转成json格式的字符串传递,接收方再解析成对象 * 4:把对象拆分基本数据属性传递,接收方再生成对象 * 5:利用静态属性,或者把值存在两边都能取到的地方 * 6:利用sharedPreferences * */ public void puObject() { //方式1 intent.putExtra("key1", parcelableModel); //方式2 intent.putExtra("key2", serializableModel); //方式3 String json = new Gson().toJson(normalModel); intent.putExtra("key3", json); } /* * 传递集合的方式(非String) * 1.对象实现Parcelable接口 * 2.集合强转Serializable,接收端用getSerializableExtra()方法在强转 * */ public void putList() { //方式1 intent.putParcelableArrayListExtra("key4", mListParcelableModel); //方式2 intent.putExtra("key5", ((Serializable) mListSerializableModel)); //方式3 ParcelableModel[] a = new ParcelableModel[mListParcelableModel.size()]; intent.putExtra("key6", mListParcelableModel.toArray(a)); startActivity(intent); }}
接收端:
public class ReceiveValueActivity extends AppCompatActivity { private TextView mTvShow; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_receive_value); mTvShow = ((TextView) findViewById(R.id.tv_show)); Intent intent = getIntent(); //对象 ParcelableModel key1 = (ParcelableModel) intent.getParcelableExtra("key1"); SerializableModel key2 = (SerializableModel) intent.getSerializableExtra("key2"); String key3 = intent.getStringExtra("key3"); NormalModel normalModel = new Gson().fromJson(key3, NormalModel.class); //集合 ArrayList<Parcelable> parcelableArrayList = intent.getParcelableArrayListExtra("key4"); ArrayList<SerializableModel> modelArrayList = (ArrayList<SerializableModel>) intent.getSerializableExtra("key5"); Parcelable[] key6s = intent.getParcelableArrayExtra("key6"); mTvShow.setText(key1.getName()+key2.getName()+normalModel.getName()+"*集合*"+ ((ParcelableModel) parcelableArrayList.get(1)).getName() +modelArrayList.get(1).getName()+ ((ParcelableModel) key6s[1]).getName()); }}
附上源码下载:
demo源码
阅读全文
0 0
- Activity通信-传递对象、集合总结
- Activity间传递对象集合
- Activity间跳转传递对象集合List
- Activity传递对象集合到Fragment
- activity和activity之间传递数据(字符串、集合、对象)
- Activity传递JavaBean对象集合给Activity/Fragment
- Android Activity之间实现数据(对象,对象集合)传递
- android中传递复杂参数,activity之间和fragment之间的bundle传递集合/对象
- android中传递复杂参数,activity之间和fragment之间的bundle传递集合/对象
- android中传递复杂参数,activity之间和fragment之间的bundle传递集合/对象
- Android Fragment和Activity数据或对象的传递总结
- activity间传递对象
- Activity 传递 List对象
- Activity值对象传递
- activity之间传递对象
- android activity传递对象
- activity之间传递对象
- Activity之间传递对象
- 06读书笔记之进度条
- docker之daemon.json
- poj3255次短路
- Ubuntu中文版系统文件夹改成英文方法
- 文件上传-commons-fileupload组件
- Activity通信-传递对象、集合总结
- Matlab读取二进制文件
- Python3之列表(list)
- 基于TCP协议简易聊天室(客户端)
- Linux下Samba服务器配置,已成功
- C#实现的调用Quartz.dll的定时任务插件
- View的事件分发机制
- 数据库设计--库的拆分与表的分割
- 文章标题