首页 > 代码库 > 17开年第一篇Activity之间传递List<T> 以及T对象类型数据的方法

17开年第一篇Activity之间传递List<T> 以及T对象类型数据的方法

现在转眼都十三了,大家都工作了,自己确还没有在家里闲得慌于是就做个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 = http://www.mamicode.com/"SYRINXLIST";>
下面上效果图:

主活动中:(点击任意一个item进入下个活动)

技术分享


接收活动中:可以看到成功的接收到了来自上一个活动的List<T>以及单个对象的数据


技术分享



总结:我们想要传递List<T>或者某个实例对象数据很简单,只需要那个需要传递的实例定义时有接口Serializable,以及取数据的时候使用getSerializableExtra(name);方法就可以了。


17开年第一篇Activity之间传递List<T> 以及T对象类型数据的方法