传输自定义对像的实体类需要实现 parcelable接口同时要在实体类中 创建
Creator 对象 这个个东西 一个是起来写的作用 另外一个是起到读的作用。
实体类
import android.os.Parcel; import android.os.Parcelable; import java.util.List; /** * Created by Dai xueyue on 15/4/23. */ public class ContainCategories implements Parcelable { String title; String icon; int id; List <CategoryBase> child; public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getIcon() { return icon; } public void setIcon(String icon) { this.icon = icon; } public int getId() { return id; } public void setId(int id) { this.id = id; } public List<CategoryBase> getChild() { return child; } public void setChild(List<CategoryBase> child) { this.child = child; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(title); dest.writeString(icon); dest.writeInt(id); dest.writeList(child); } public static final Creator<ContainCategories> CREATOR = new Creator<ContainCategories>() { @Override public ContainCategories createFromParcel(Parcel source) { ContainCategories categories = new ContainCategories(); categories.setTitle(source.readString()); categories.setIcon(source.readString()); categories.setId(source.readInt()); categories.setChild(source.readArrayList(List.class.getClassLoader())); return categories; } @Override public ContainCategories[] newArray(int size) { return new ContainCategories[size]; } }; }
第一个 Fragment 核心代码用红色标注
import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.view.ViewPager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.GridView; import android.widget.Toast; import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** * Created by hbx on 15/4/7. */ public class LoveListenNoticeFragment extends NoRecycleViewFragment implements ViewPager.OnPageChangeListener{ private GridView noticeGridView; LoveListenNoticeAdapter adapter; CompositeSubscription mainSubs = new CompositeSubscription(); @Override public View createView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_love_listen_notice, container, false); // initData(); initNoticeInfo(view); return view; } private void initNoticeInfo(View view) { noticeGridView = (GridView) view.findViewById(R.id.gv_notice); View emptyView = view.findViewById(R.id.progress); noticeGridView.setEmptyView(emptyView); } private LoveListenBook getLoveListenBookApi() { return App.getApi().getLoveListenBookApi(); } @Override public void activityCreated(@Nullable Bundle savedInstanceState) { mainSubs.clear(); mainSubs.add(getLoveListenBookApi().getLoveListenCategoriy() // .doOnSubscribe(this::showProgressBar) .observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.newThread()) .subscribe(( dataResult) -> { updateUI(dataResult); }, e -> { })); } private View.OnClickListener listenBookTypeClick = new View.OnClickListener() { @Override public void onClick(View v) { if (null == v.getTag() || !(v.getTag() instanceof ContainCategories)) { return; } ContainCategories categories = (ContainCategories) v.getTag(); LoveListenCategoriesChildFragment categoriesChildFragment = LoveListenCategoriesChildFragment.getInstance(getActivity(), categories); ((MainActivity)getActivity()).push(LoveListenNoticeFragment.class.getName(),categoriesChildFragment); } }; public void updateUI(AllCateGoriyObject infos) { if (null != infos) { adapter = new LoveListenNoticeAdapter(this.getActivity(), this.listenBookTypeClick); noticeGridView.setAdapter(adapter); List<ContainCategories> listInfo = new ArrayList<ContainCategories>(); for (int i = 0; i < infos.getCategories().size(); i++) { if (i == 6) { break; } listInfo.add(infos.getCategories().get(i)); } if (0 < listInfo.size()) { adapter.setList(listInfo); } } } @Override public void onPageScrolled(int i, float v, int i2) { } @Override public void onPageSelected(int i) { } @Override public void onPageScrollStateChanged(int i) { } }
第二个 Fragment
import android.content.Context; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.song1.musicno1.R; import com.song1.musicno1.fragments.base.BaseFragment; import com.song1.musicno1.models.lovelisten.ContainCategories; import java.util.ArrayList; import java.util.List; /** * Created by Dai xueyue on 15/4/27. */ public class LoveListenCategoriesChildFragment extends BaseFragment { List<ContainCategories> categories; public static LoveListenCategoriesChildFragment getInstance(@NonNull Context context , ContainCategories categories) { Bundle argument = new Bundle(); argument.putParcelable("categories",categories); return (LoveListenCategoriesChildFragment) Fragment.instantiate(context,LoveListenCategoriesChildFragment.class.getName(),argument); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); Bundle args = getArguments(); ContainCategories categories = args.getParcelable("categories"); // 取得传过来的对象 if(null != categories){ // 下面是开始更新UI upDateUI(categories); } } public void upDateUI(ContainCategories containCategories){ } @Override protected void backPressed() { super.backPressed(); } @Override public void setArguments(Bundle args) { super.setArguments(args); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_love_book_detail_main,container,false); return super.onCreateView(inflater, container, savedInstanceState); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); } @Override public void onStart() { super.onStart(); } @Override public void onResume() { super.onResume(); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); } @Override public void onPause() { super.onPause(); } @Override public void onDestroy() { super.onDestroy(); } }