在Android中的单个RecyclerView中设置不同的适配器

时间:2016-11-23 08:48:35

标签: android android-fragments android-viewpager android-recyclerview

我有MenuActivity,它有RecyclerView和ViewPager。此ViewPager有3个页面,使用三个不同的片段。 FragmentOne,FragmentTwo,FragmentThree,所有这些片段都使用RecyclerView数据。 我想在RecyclerView Adapter中使用三个不同的ArrayList,这取决于Fragment用户正在查看什么。 一种解决方案是将RecyclerView放在所有三个片段中,并在Fragment中获取更新数据。我只是想知道是否可以根据调用的Fragment在MenuActivity中设置适配器数据。

   @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等。 请建议。 谢谢 迪帕克

1 个答案:

答案 0 :(得分:1)

技术上是的,你可以,但这是否是一个好的做法是另一个问题。

您必须在每个片段中都有RecyclerView,但您可以从Activity获取适配器的数据。片段可以访问他们的Activity,这就是Android生命周期的工作方式,因此可以从Fragment调用((MenuActivity) getActivity()).getMenuList();,然后将结果传递给Fragments适配器。然而,这将把片段与活动结合起来,这不是一个好习惯。

鉴于您的数据看起来不是动态的,我个人会做的是让您的MenuItem类实现Parcelable,然后当您创建Fragments时,您可以通过MenuItems的ArrayList作为参数,这样你的片段与您的活动无关。