現在轉眼都十三了,大家都工作了,自己確還沒有在家里閑得慌于是就做個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);方法就可以了。
新聞熱點
疑難解答