android Fragment 与 Fragment 之间传参(对象)
2015-04-27 19:06
127 查看
传输自定义对像的实体类需要实现 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);}@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);}@Overridepublic void onActivityCreated(@Nullable Bundle savedInstanceState) {super.onActivityCreated(savedInstanceState);Bundle args = getArguments();ContainCategories categories = args.getParcelable("categories"); // 取得传过来的对象if(null != categories){// 下面是开始更新UIupDateUI(categories);}}public void upDateUI(ContainCategories containCategories){}@Overrideprotected void backPressed() {super.backPressed();}@Overridepublic void setArguments(Bundle args) {super.setArguments(args);}@Overridepublic 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);}@Overridepublic void onViewCreated(View view, Bundle savedInstanceState) {super.onViewCreated(view, savedInstanceState);}@Overridepublic void onStart() {super.onStart();}@Overridepublic void onResume() {super.onResume();}@Overridepublic void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);}@Overridepublic void onPause() {super.onPause();}@Overridepublic void onDestroy() {super.onDestroy();}}
相关文章推荐
- android中传递复杂参数,activity之间和fragment之间的bundle传递集合/对象
- android中传递复杂参数,activity之间和fragment之间的bundle传递集合/对象
- android中传递复杂参数,activity之间和fragment之间的bundle传递集合/对象
- 67.android布局-Fragment与Activity之间传递数据
- Android笔记三.不同Activity之间的传递数据(Bundle对象的使用)
- Android使用Fragment来实现TabHost的功能(解决切换Fragment状态不保存)以及各个Fragment之间的通信
- Android使用Fragment来实现TabHost的功能(解决切换Fragment状态不保存)以及各个Fragment之间的通信
- Android之 Activity之间传递数据(bitmap和map对象)
- Android笔记Fragment与Activity之间传递数据
- Android 程式开发:(三)初识Fragment —— 3.4fragments实例之间的通信
- Android上在两个Activity之间传递Bitmap对象
- Android使用Fragment来实现TabHost的功能(解决切换Fragment状态不保存)以及各个Fragment之间的通信
- Android中fragment之间和Activity的传值、切换
- Android中Activity和Fragment之间的通信
- Activity与Fragment数据传递之Activity之间获取数据 分类: Android 2015-07-02 10:13 10人阅读 评论(0) 收藏
- Android中通过Intent在各组件之间传递类对象
- 使用HttpURLConnection实现在android客户端和服务器之间传递对象
- Android中如何使用Intent在Activity之间传递对象[使用Serializable或者Parcelable]
- android Fragment与Activity之间数据交互
- Android Service与Activity之间通信:通过Binder对象、Broadcast广播