Paso mis datos como parcelableArrayList de Activity -> Adapter -> Fragment. En mi método estático newInstance(), estoy instanciando un Fragment y estableciendo sus argumentos. Verifico si los argumentos están establecidos o no en el método newInstance() en sí. Cuando intento acceder a los datos en mi onCreate(), obtengo una excepción de puntero nula.

Adaptador donde paso los datos a fragmentos:

@Override
public Fragment getItem(int position){
    switch(position){
        case 0:
            return StatusFragment.newInstance("Hahahahah, Dumbfuck");
        case 1:
            return GraphListFragment.newInstance(position, tempBundle);
        case 2:
            return GraphListFragment.newInstance(position, humBundle);
        case 3:
            return GraphListFragment.newInstance(position, pressureBundle);
        default:
            return GraphFragment.newInstance(1);
    }
}

Mi método estático newInstance ():

public static Fragment newInstance(int position, Bundle savedInstanceState){
    GraphListFragment graphListFragmentInstance = new GraphListFragment();

    if(savedInstanceState != null){
        Bundle bundle =new Bundle();
        bundle.putParcelableArrayList("list", savedInstanceState.getParcelableArrayList("list"));
        graphListFragmentInstance.setArguments(bundle);
        Log.d("==============>>>>", graphListFragmentInstance.getArguments().toString());
    }
    return new GraphListFragment();
}

Aquí está el resultado del registro:

 D/==============>>>>: Bundle[{list=[com.ishanvadwala.cmpe295b.Model.TemperatureData@8da04a0, com.ishanvadwala.cmpe295b.Model.TemperatureData@5fce859, com.ishanvadwala.cmpe295b.Model.TemperatureData@9503c1e, com.ishanvadwala.cmpe295b.Model.TemperatureData@6aeecff, ....

Aquí está mi onCreate () donde intento acceder a los datos:

 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Log.d("onCreate====>>>>", getArguments().toString());
        /*
        List<?> list = (ArrayList<? extends Parcelable>) getArguments().getParcelableArrayList("list");
        if(list.get(0) instanceof TemperatureData){
            for(TemperatureData tempData: (List<TemperatureData>)list){
                System.out.println("I got this: "+tempData.getTemperature());
            }
        }
        */
    }

He visto varias publicaciones de StackOverflow y todavía no tengo idea de lo que estoy haciendo mal.

0
ishan Vadwala 5 may. 2017 a las 23:00

2 respuestas

La mejor respuesta

Reemplazar

return new GraphListFragment();

Con

return  graphListFragmentInstance;

¡Ese es el Fragmento real con el Paquete!

Además, crear un nuevo paquete es inútil. Solo configura el que estás pasando

if(savedInstanceState != null){
    // Bundle bundle =new Bundle(); 
    // bundle.putParcelableArrayList("list", savedInstanceState.getParcelableArrayList("list"));
    graphListFragmentInstance.setArguments(savedInstanceState);
    Log.d("==============>>>>", savedInstance.toString());
}

return  graphListFragmentInstance;
1
OneCricketeer 5 may. 2017 a las 20:08

Cómo pasar args a fragmentos

SET

Bundle bundle = new Bundle();
bundle.putString("Video1", "Sosis");
bundle.putString("Video2", "Dumb");

Fragment fragment = new YourFragment();
fragment.setArguments(bundle);

// Attach the fragment

OBTENER

public static class YourFragment extends Fragment
{
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        if (getArguments() != null)
        {
            Log.e(getArguments().getString("Video1", ""));
            Log.e(getArguments().getString("Video2", ""));
        }
    }
}
0
A Dev 5 may. 2017 a las 20:04