,還是先建立一個Bean類,因為要傳陣列,所以要繼承一個Parcelable介面。
package com.example.app017_fragment03;import android.os.Parcel;import android.os.Parcelable;public class Bean implements Parcelable { String name; String city; protected Bean(Parcel in) { name = in.readString(); city = in.readString(); } public static final Creator<Bean> CREATOR = new Creator<Bean>() { @Override public Bean createFromParcel(Parcel in) { Bean bean=new Bean(in.readString(),in.readString()); return bean; } @Override public Bean[] newArray(int size) { return new Bean[size]; } }; public Bean(String name, String city) { super(); this.name = name; this.city = city; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(name); dest.writeString(city); }}
然後,就是在MainActivity新增程式碼了。
//我這裡讓這個類實現一個OnClickListner,這樣程式碼更清楚public class MainActivity extends AppCompatActivity implements View.OnClickListener { ArrayList<Bean> data= new ArrayList<Bean>();//這就是等下要傳的陣列。 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //沒有外部資料,用一個for迴圈填充陣列。 for(int i=0;i<20;i++){ Bean bean=new Bean("name"+i,"city"+(20-i)); data.add(bean); } Button btn1=findViewById(R.id.btn_1); Button btn2=findViewById(R.id.btn_2); btn1.setOnClickListener(this); btn2.setOnClickListener(this); } @Override public void onClick(View v) { Bundle bundle;//這個是資料傳導管理類 switch (v.getId()){ case R.id.btn_1: bundle=new Bundle(); //把資料集放到管理類的例項中 bundle.putParcelableArrayList("student",data); BlankFragment blankFragment=new BlankFragment(); blankFragment.setArguments(bundle);//再把這個管理類放到fragment的引數裡 changeit(blankFragment); } } private void changeit(Fragment fragment){ //這裡和RecyclerView一樣,都是有一個管裡類,這裡得到一個管理類物件。 FragmentManager fragmentManager=getSupportFragmentManager(); //這個和資料庫裡差不多,例項化一個trasaction處理事物。 FragmentTransaction transaction=fragmentManager.beginTransaction(); //替換掉原有的framelayout介面物件 transaction.replace(R.id.framelayout,fragment); //這裡是把當前transaction推入到一個返回棧裡,這樣點返回的時候能返回到剛剛呼叫的介面 transaction.addToBackStack(null); //事物的提交 transaction.commit(); }
然後就是在一個fragment類裡把這個資料讀出來。
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment //得到當前介面例項 View v=inflater.inflate(R.layout.fragment_blank, container, false); //從例項裡得到資料管理例項 Bundle bundle=getArguments(); //從管裡實例裡得到資料集 ArrayList<Bean> data=bundle.getParcelableArrayList("student"); //我這裡是把整個資料集的內容直接在log裡打印出來了。 for(int i=0;i<data.size();i++){ Bean bean=data.get(i); Log.e("liao", "onCreateView: "+bean.getName()+" and "+bean.getCity()); } return v; }
最新評論