0

我有MenuActivity,它有RecyclerView和ViewPager。這個ViewPager有3個頁面,它們使用三個不同的片段。 FragmentOne,FragmentTwo,FragmentThree,所有這些碎片都使用RecyclerView數據。 我想使用三種不同的ArrayList需要在RecyclerView適配器中設置,這取決於Fragment用戶正在查看的內容。 一個解決方案是將RecyclerView放入所有三個片段中,並在Fragment中獲取更新數據。我只想知道是否可以根據調用的Fragment來在MenuActivity中設置適配器數據。在Android的單個RecyclerView中設置不同的適配器

@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的生命週期如何工作,因此可以從Fragment中調用((MenuActivity) getActivity()).getMenuList();,然後將結果傳遞給Fragments適配器。然而,這會將片段與活動結合起來,這不是很好的做法。

鑑於它看起來你的數據不是動態的,我個人所做的就是讓你的MenuItem類實現Parcelable,然後當你創建你的Fragments時,你可以通過你的ArrayList的MenuItems作爲參數,這樣你的片段與你的活動無關。

相關問題