首页 > 学院 > 开发设计 > 正文

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

2019-11-09 14:50:08
字体:
来源:转载
供稿:网友

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


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表