现在转眼都十三了,大家都工作了,自己确还没有在家里闲得慌于是就做个App,谁知道就遇到了Activity间传递实例以及List<T>数据的问题。网上同类型的文章很多,我写只是为了做个笔记预防忘记(其他的我觉得进入不了状态,还是自己的思维好理解一些)。
废话不多说下面正题。
要实现上面的需求有几种方式:
1.定义全局静态变量,由一个静态变量集合类管理,至于安全方面,可以把控访问方式,比如验证访问,不过相对来说感觉比较麻烦。
2. Application中设置一个属性,公开读取。
3.使用Serializable序列化我们需要传递的数据,再通过Intent的putExtra(name,value);方法添加到Intent中,再接收活动中使用Intent的getSerializableExtra(name);方法获取到相对应数据。
下面我们就试试第三种:
直接上代码:
需要传递的数据的类定义需要修改,让他有Serializable接口,才能实现数据的序列化
package winter.zxb.smilesb101.easysyrinx.Data.SyrinxInfo;
import java.io.Serializable;
import java.util.ArrayList;
/**
* 项目名称:EasySyrinx
* 类描述:希芸物品信息类,接口后面的是关键我们需要这个接口才能让数据序列化
* 创建人:SmileSB101
* 创建时间:2017/2/1 0001 22:29
* 修改人:Administrator
* 修改时间:2017/2/1 0001 22:29
* 修改备注:
*/
public class SyrinxItem implements Serializable{
/**
* 用于进行键值对封装时作为键
*/
public final static String NAME_STRING = "name";
public final static String CODE_STRING = "code";
public final static String KIND_STRING = "kind";
public final static String SERIES_STRING = "series";
public final static String IN_PRICE_STRING = "in_price";
public final static String OUT_PRICE_STRING = "out_price";
public final static String INTRODUCE_STRING = "introduce";
public final static String TAGLIST_STRING = "tagList";
public final static String FREEPOST_STRING = "freePost";
private String name;
private String code;
private String kind;
private String format;
private String series;
private float in_price;
private float out_price;
private String introduce;
private ArrayList<String> tagList;
private boolean freePost;
public SyrinxItem(){
this.tagList = new ArrayList<>();
this.in_price = 0;
this.out_price = 0;
freePost = false;
}
/**
* 全参数构造方法
* @param code 商品编号
* @param name 商品名称
* @param kind 商品种类
* @param format 商品规格
* @param series 商品系列
* @param in_price 商品
* @param out_price 卖价
* @param introduce 介绍
* @param tagList 标签列表
* @param freePost 包邮
*/
public SyrinxItem(String code,String name,String kind,String format,String series,float in_price,float out_price,String introduce,ArrayList<String> tagList,boolean freePost){
this.code = code;
this.name = name;
this.kind = kind;
this.format = format;
this.series = series;
this.in_price = in_price;
this.out_price = out_price;
this.introduce = introduce;
this.tagList = tagList;
this.freePost = freePost;
}
public String getFormat(){
return format;
}
public void setFormat(String format){
this.format = format;
}
/**
* 获取是否包邮
* @return
*/
public String isFreePost(){
return freePost?"包邮":"不包邮";
}
/**
* 设置是否包邮
* @param freePost
*/
public void setFreePost(boolean freePost){
this.freePost = freePost;
}
/**
* 获取系列名称
* @return
*/
public String getSeries(){
return series;
}
/**
* 设置系列名称
* @param series
*/
public void setSeries(String series){
this.series = series;
}
/**
* 获取类型(商品颜色或者分类等)
* @return
*/
public String getKind(){
return kind;
}
/**
* 设置类型(商品颜色或者分类等)
* @param kind
*/
public void setKind(String kind){
this.kind = kind;
}
/**
* 获取卖出价格
* @return
*/
public float getOut_price(){
return out_price;
}
/**
* 设置卖出价格
* @param out_price
*/
public void setOut_price(float out_price){
this.out_price = out_price;
}
/**
* 获取物品名称
* @return 物品名称
*/
public String getName(){
return name;
}
/**
* 设置物品名称
* @param name 物品民称
*/
public void setName(String name){
this.name = name;
}
/**
* 获取商品编号
* @return 商品编号
*/
public String getCode(){
return code;
}
/**
* 设置商品编号
* @param code
*/
public void setCode(String code){
this.code = code;
}
/**
* 获取商品进价
* @return
*/
public float getIn_price(){
return in_price;
}
/**
* 设置商品进价
* @param in_price
*/
public void setIn_price(float in_price){
this.in_price = in_price;
}
/**
* 获取商品介绍
* @return
*/
public String getIntroduce(){
return introduce;
}
/**
* 设置商品介绍
* @param introduce
*/
public void setIntroduce(String introduce){
this.introduce = introduce;
}
/**
* 获取商品标签(特性)
* @return
*/
public ArrayList<String> getTagList(){
return tagList;
}
/**
* 设置商品特性
* @param tagList
*/
public void setTagList(ArrayList<String> tagList){
this.tagList = tagList;
}
/**
* 设置商品特性
* @param tag
*/
public void setTagList(String tag)
{
this.tagList.add(tag);
}
/**
* 获取此实例的json字符串
* @return
*/
public String ToJsonString()
{
return "Syrinx ["+NAME_STRING+"="+getName()+","
+CODE_STRING+"="+getCode()+","
+KIND_STRING+"="+getKind()+","
+SERIES_STRING+"="+getSeries()+","
+IN_PRICE_STRING+"="+getIn_price()+","
+OUT_PRICE_STRING+"="+getOut_price()+","
+INTRODUCE_STRING+"="+getIntroduce()+","
+TAGLIST_STRING+"="+getTagList()+","
+freePost+"="+isFreePost()+"]";
}
}
上一个活动中:
在这里list是ArrayList<SyrinxItem>();当然里面存储了数据。series是另外一个序列化的单个对象。
Intent intent = new Intent(activity,SyrinxItemRecycleViewActivity.class);
intent.putExtra(SyrinxItemRecycleViewActivity.SYRINXLIST_VALUE,list);
intent.putExtra(SyrinxItemRecycleViewActivity.SYRINXSERIES_VALUE,series);
activity.startActivity(intent);
接收的活动中:
使用getIntet();获取到Intent,然后通过Intent中的getSerializableExtra(name);方法来获取到数据,注意强制类型转换。
package winter.zxb.smilesb101.easysyrinx.UI.Activity;
import android.content.Context;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import java.util.ArrayList;
import winter.zxb.smilesb101.easysyrinx.Data.SyrinxInfo.SyrinxItem;
import winter.zxb.smilesb101.easysyrinx.Data.SyrinxInfo.SyrinxItemRecycleViewAdapter;
import winter.zxb.smilesb101.easysyrinx.Data.SyrinxInfo.SyrinxSeries;
import winter.zxb.smilesb101.easysyrinx.R;
/**
* 希芸产品信息的展示活动
*/
public class SyrinxItemRecycleViewActivity extends AppCompatActivity{
public final static String SYRINXLIST_VALUE = "SYRINXLIST";
public final static String SYRINXSERIES_VALUE = "SYRINXSERIES";
private final static String TAG = "SyrinxItemActivity";
private View rootView;
private RecyclerView recyclerView;
private Context context;
private SyrinxItemRecycleViewAdapter itemRecycleViewAdapter;
private SyrinxSeries syrinxSeries;
private ArrayList<SyrinxItem> syrinxItems;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.syrinxitem_recycleview_layout);
Intent intent = getIntent();
syrinxItems = (ArrayList<SyrinxItem>)intent.getSerializableExtra(SYRINXLIST_VALUE);
syrinxSeries = (SyrinxSeries)intent.getSerializableExtra(SYRINXSERIES_VALUE);
recyclerView = (RecyclerView)findViewById(R.id.syrinxitem_layout_recycleView);
LinearLayoutManager layoutmanager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutmanager);
itemRecycleViewAdapter = new SyrinxItemRecycleViewAdapter(syrinxItems,this);
recyclerView.setAdapter(itemRecycleViewAdapter);
Log.i(TAG,"onCreate: huodongchuangjian");
}
}
下面上效果图:
主活动中:(点击任意一个item进入下个活动)
接收活动中:可以看到成功的接收到了来自上一个活动的List<T>以及单个对象的数据
总结:我们想要传递List<T>或者某个实例对象数据很简单,只需要那个需要传递的实例定义时有接口Serializable,以及取数据的时候使用getSerializableExtra(name);方法就可以了。