0

У меня есть MenuActivity, у которого есть RecyclerView и ViewPager. Этот ViewPager имеет 3 страницы, которые используют три разных фрагмента. FragmentOne, FragmentTwo, FragmentThree, все эти фрагменты используют данные RecyclerView. Я хочу использовать три разных ArrayList, которые необходимо установить в адаптере RecyclerView, что зависит от того, какой пользователь Fragment просматривает. Одним из решений является размещение RecyclerView во всех трех фрагментах и ​​получение данных обновления во Фрагменте. Я просто хочу знать, можно ли установить данные адаптера в MenuActivity на основе того, что вызывается Fragment.Настройка различных адаптеров в одном RecyclerView в Android

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_menu, container, false); 
     recyclerView = (RecyclerView) rootView.findViewById(R.id.recycler_view); 
     itemList = new ArrayList<>(); 
     prepareMenuData(); 
     vegadapter = new MenuItemAdapter(getContext(),vegItemList); 
     nonvegadapter = new MenuItemAdapter(getContext(),nonvegItemList); 
     dessertAdapter = new MenuItemAdapter(getContext(),dessertItemList); 
     recyclerView.setAdapter(vegadapter); 
     RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getContext()); 
     recyclerView.setLayoutManager(layoutManager); 



     return rootView; 
    } 

prepareMenuData();

 for (MenuItem item:itemList) 
     { 
      if(item.getCategory().equals("VEG")) 
      { 
       vegItemList.add(item); 
       vegadapter.notifyDataSetChanged(); 
      } 
      if(item.getCategory().equals("NONVEG")) 
      { 
       nonvegItemList.add(item); 
       nonvegadapter.notifyDataSetChanged(); 
      } 
      if(item.getCategory().equals("DESSERTVEG")) 
      { 
       dessertItemList.add(item); 
       dessertAdapter.notifyDataSetChanged(); 
      } 
     } 

Этот код не знает, когда установить vegadapter, nonvegadapter и т.д. Просьба предложить. Спасибо Deepak

ответ

1

Технически вы можете, но является ли это хорошей практикой другой вопрос.

Вы должны будете иметь RecyclerView в каждом фрагменте независимо, но вы можете получить данные для адаптера из Activity. Фрагменты имеют доступ к своей деятельности, так как жизненный цикл Android работает так из фрагмента, который вы могли бы назвать ((MenuActivity) getActivity()).getMenuList();, а затем передать результат этому адаптеру фрагментов. Это, однако, приведет к соединению фрагмента с активностью, которая не является хорошей практикой.

Учитывая, что ваши данные не являются динамическими, я бы лично сделал это, чтобы ваш класс MenuItem реализовал Parcelable, а затем, когда вы создаете свои фрагменты, вы можете пройти через ArrayList из MenuItems в качестве аргумента, таким образом ваш фрагмент не зависит от вашей деятельности.