Mi clase Singleton: Aquí está la clase Singleton que encontré en Documentaciones oficiales.

    public class Singleton {
    private static Singleton uniqInstance;
    private Singleton() {
    }
    public static Singleton getInstance() {
        if (uniqInstance == null) {
            {
                if (uniqInstance == null)
                   uniqInstance = new Singleton();
            }
        }
        return uniqInstance;
    }
   } 

Mi primer fragmento: este es mi primer fragmento, aquí estoy agregando elementos ArrayList con nombres de clase de objeto.

     public View onCreateView(LayoutInflater inflater, ViewGroup 
          container, Bundle savedInstanceState){
          View mView = inflater.inflate(R.layout.fragment_first, container,false);
          RecyclerView rvFirst = mView.findViewById(R.id.rv_first_layout);
          rvFirst.setHasFixedSize(true);
          rvFirst.setLayoutManager(new LinearLayoutManager(mView.getContext()));
          mArrayList = new ArrayList<Names>();
          mArrayList.add(new Names("Hello"));
          mArrayList.add(new Names("This"));
          mArrayList.add(new Names("Is"));
          mArrayList.add(new Names("Android"));

          // HERE I WANT TO SEND ARRAY-LIST DATA TO THE SECOND FRAGMENT
          mAdapter = new NameAdapter(mArrayList);
          rvFirst.setAdapter(mAdapter);
          return mView;
    }        

Mi segundo fragmento: este es mi segundo fragmento, aquí estoy tratando de obtener elementos de ArrayList de First Fragment.

     public View onCreateView(LayoutInflater inflater, ViewGroup 
          container,Bundle savedInstanceState){
          View mView = inflater.inflate(R.layout.fragment_second, container,false);
          rvSecond = (RecyclerView) mView.findViewById(R.id.rv_second_layout);
          rvSecond.setHasFixedSize(true);        
          rvSecond.setLayoutManager(new LinearLayoutManager(getContext()));        
          mArrayList = new ArrayList<Names>(); 

          // HERE I WANT TO GET ARRAY-LIST FROM FIRST FRAGMENT     
          mAdapter = new NameAdapter(mArrayList);
          rvSecond.setAdapter(mAdapter);
     return mView;
   }
0
Jay Halani 27 feb. 2018 a las 14:12

4 respuestas

La mejor respuesta

Primero configure la lista de arrays dentro de la clase singleton como esta

Su clase de singleton debería ser así: -

public class Singleton {
private static Singleton uniqInstance;
public ArrayList<Names> names = new ArrayList<Names>();;
private Singleton() {
}
public static Singleton getInstance() {
    if (uniqInstance == null) 
         uniqInstance = new Singleton();
    return uniqInstance;
}
public void setArrayList(ArrayList<Names> names)
 {
      this.names = names;

     }
 public ArrayList<Names> getArrayList()
 {
      return this.names;

     }
} 

En su primer fragmento después de agregar valores en la lista: -

Singleton.getInstance().setArrayList(mArrayList);

En su segundo fragmento consígalo así:

Singleton.getInstance().getArrayList();
2
Deeksha 17 ene. 2020 a las 11:26

Por qué usar singleton para esto, si ambos fragmentos están unidos a la misma actividad, entonces puedes hacer esto,

Primero cree una variable de lista pública en su clase de actividad

Luego referencialo desde tus clases de fragmentos por su contexto como

((YourActivityClass)getActivity()).myArrayList.get(i);
2
Abhinay Sharma 27 feb. 2018 a las 11:20

Puede pasarlo a través de la actividad de alojamiento o almacenarlo en la clase de aplicación extendida. Documentación oficial.

Otras opciones incluyen EventBus, Intent, MessageLooper.

EventBus es muy simple, pero si lo usas en exceso, el código se convertirá en espagueti.

0
toshkinl 27 feb. 2018 a las 11:13

Para pasar datos entre fragmentos, siga estos pasos:

Bundle bundle = new Bundle();
putParcelableArrayList("ArrayListKey", mArrayList);

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

//Add Fragment while starting it   
getFragmentManager()
                .beginTransaction()
                .add(R.id.frame_layout_root_container, fragment)
                .commit();

En el segundo fragmento:

 Bundle mBundle = new Bundle();
 mBundle = getArguments();

if (null != mBundle) {
    ArrayList arrayList =  getParcelableArrayList("ArrayListKey");
}
0
Jeelan 27 feb. 2018 a las 11:23