现在转眼都十三了,大家都工作了,自己确还没有在家里闲得慌于是就做个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);方法就可以了。
新闻热点
疑难解答