Мой класс Singleton . Вот класс Singleton, который я нашел в официальной документации.

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

Мой первый фрагмент . Это мой первый фрагмент. Здесь я добавляю элементы ArrayList с именами классов объектов.

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

Мой второй фрагмент . Это мой второй фрагмент. Здесь я пытаюсь получить элементы ArrayList из Первого фрагмента.

     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 Фев 2018 в 14:12

4 ответа

Лучший ответ

Сначала установите arraylist внутри синглтон-класса следующим образом

Ваш синглтон-класс должен быть таким: -

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;

     }
} 

В вашем первом фрагменте после добавления значений в список: -

Singleton.getInstance().setArrayList(mArrayList);

В вашем втором фрагменте получите это так:

Singleton.getInstance().getArrayList();
2
Deeksha 17 Янв 2020 в 11:26

Зачем использовать синглтон для этого, если оба ваших фрагмента связаны с одним и тем же действием, то вы можете сделать это,

Сначала создайте общедоступную переменную списка в вашем классе деятельности

Затем ссылаться на него из ваших классов фрагментов по его контексту, как

((YourActivityClass)getActivity()).myArrayList.get(i);
2
Abhinay Sharma 27 Фев 2018 в 11:20

Вы можете передать его через активность хостинга или сохранить в расширенном классе приложения. Официальная документация.

Другие варианты включают в себя EventBus, Intent, MessageLooper.

EventBus очень прост, но если вы злоупотребите им, код станет спагетти.

0
toshkinl 27 Фев 2018 в 11:13

Для передачи данных между фрагментами выполните следующие действия:

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

Во втором фрагменте:

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

if (null != mBundle) {
    ArrayList arrayList =  getParcelableArrayList("ArrayListKey");
}
0
Jeelan 27 Фев 2018 в 11:23