android Fragment 与 Fragment 之间传参(对象)

传输自定义对像的实体类需要实现 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();
  }
}

猜你喜欢

转载自blog.csdn.net/qijian0503/article/details/45314381