您的位置:首页 > 移动开发 > Android开发

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();}}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐