2015-10-15 119 views
0

在使用Retrofit并使用非同步回调消费了json之后,我无法将ArrayList从MainActivity传递到片段。从MainActivity在片段之间传递ArrayList和Parcelable

代码:

lFragmentManager = getFragmentManager(); 
      lFragment = lFragmentManager.findFragmentById(R.id.frame_container); 
      lFragment = new Fragment_Categories(); 
      Bundle bundle = new Bundle(); 
      bundle.putParcelableArrayList("list_categories", Categories_.getCategories()); 
      //for(int a = 0 ; a < Categories_.getCategories().size(); a++) 
      // Log.d("billy",Categories_.getCategories().get(a).getTitle()); 
      lFragment.setArguments(bundle); 
     lFragmentManager.beginTransaction().replace(R.id.frame_container ,lFragment).commit(); 

注意,在注释日志并打印清单的背景下,所以我把ArrayList与此代码片段里面onCreateView

if(savedInstanceState != null) 
     categories = savedInstanceState.getParcelableArrayList("list_categories"); 

    /* 
    * initialize the Recycler view 
    */ 
    mRecycler = (RecyclerView)view.findViewById(R.id.categories_list); 
    mAdapter = new AdapterCategories(categories,getActivity()); 
    mRecycler.setAdapter(mAdapter); 

这是我的班级类别:

public class Categories implements Parcelable{ 

private ArrayList<NavDrawerItem> categories; 

@Override 
public int describeContents() { 
    return 0; 
} 

@Override 
public void writeToParcel(Parcel dest, int flags) { 
    dest.writeTypedList(categories); 

} 

public static final Parcelable.Creator<Categories> CREATOR = new Parcelable.Creator<Categories>() { 

    public Categories createFromParcel(Parcel in) { 
     return new Categories(in); 

    } 

    public Categories[] newArray(int size){ 
     return new Categories[size]; 
    } 
}; 

private Categories(Parcel in){ 

    categories = in.createTypedArrayList(NavDrawerItem.CREATOR); 
} 

public ArrayList<NavDrawerItem> getCategories() { 
    return categories; 
} 
} 

这里是类NavDrawerItem:

public class NavDrawerItem implements Parcelable { 

private String title; 
private String description; 
private String image; 
private String post_count; 
private String id; 
private String slug; 
private int parent; 

@Override 
public int describeContents() { 
    return 0; 
} 

@Override 
public void writeToParcel(Parcel dest, int flags) { 
    dest.writeString(title); 
    dest.writeString(description); 
    dest.writeString(image); 
    dest.writeString(post_count); 
    dest.writeString(id); 
    dest.writeString(slug); 
    dest.writeInt(parent); 
} 

public static final Parcelable.Creator<NavDrawerItem> CREATOR = new Parcelable.Creator<NavDrawerItem>() { 

    public NavDrawerItem createFromParcel(Parcel in) { 
     return new NavDrawerItem(in); 

    } 

    public NavDrawerItem[] newArray(int size){ 
     return new NavDrawerItem[size]; 
    } 
}; 

private NavDrawerItem(Parcel in){ 
    title = in.readString(); 
    description = in.readString(); 
    image = in.readString(); 
    post_count = in.readString(); 
    id = in.readString(); 
    slug = in.readString(); 
    parent = in.readInt(); 
} 

的问题是,内部片段(试图通过列表的RecyclerView的适配器时)或RecyclerView我拿一个空异常的转接器内:

显示java.lang.NullPointerException:尝试上的空对象引用调用虚拟方法的java.util.ArrayList android.os.Bundle.getParcelableArrayList(java.lang.String中)'

谢谢你的帮助!

回答

2

您不会使用savedInstanceState来获取您的参数,因为它们不作为saveInstanceState()操作的一部分传递。你想用来代替。所以试试这个...

categories = getArguments().getParcelableArrayList("list_categories");

+0

是的,我没有看到那个谢谢! – Vasilisfoo

+0

是的,我尝试但它有等待时间 – Vasilisfoo