setarguments pass getintent from activity android arraylist parcelable

pass - send string to fragment android



Pasar ArreyList entre fragmentos con parcelable (1)

Después de consumir un json con Retrofit y usar una devolución de llamada no síncrona, no puedo pasar An ArrayList desde The MainActivity a un fragmento.

Código de MainActivity:

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();

Tenga en cuenta que el Log in comments imprime el contexto de la lista , por lo que tomo ArrayList en el fragmento con este código dentro 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);

Aquí está mi Categoría de clase:

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; } }

Y aquí está el Class 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(); }

El problema es que dentro del fragmento (cuando intento pasar la lista al Adaptador de RecyclerView ) o dentro del adaptador de RecyclerView tomo una excepción nula:

java.lang.NullPointerException: intento de invocar el método virtual ''java.util.ArrayList android.os.Bundle.getParcelableArrayList (java.lang.String)'' en una referencia de objeto nulo

¡¡Gracias por la ayuda!!


No usará savedInstanceState para obtener sus argumentos, ya que no se pasaron como parte de una operación saveInstanceState() . Desea usar getArguments() lugar. Entonces prueba esto ...

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