【问题标题】:Setting different adapter in single RecyclerView in Android在 Android 的单个 RecyclerView 中设置不同的适配器
【发布时间】:2016-11-23 08:48:34
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

    无论如何,您都必须在每个 Fragment 中拥有 RecyclerView,但您可以从 Activity 获取适配器的数据。 Fragment 可以访问它们的 Activity,这就是 Android 生命周期的工作方式,因此您可以从 Fragment 调用 ((MenuActivity) getActivity()).getMenuList();,然后将结果传递给该 Fragments 适配器。但是,这会将 Fragment 与 Activity 耦合,这不是一个好的做法。

    鉴于您的数据看起来不是动态的,我个人会做的是让您的 MenuItem 类实现 Parcelable,然后当您创建 Fragments 时,您可以将 MenuItems 的 ArrayList 作为参数传递,这样您的片段独立于您的 Activity。

    【讨论】:

      猜你喜欢
      • 2019-11-30
      • 1970-01-01
      • 1970-01-01
      • 2016-11-13
      • 1970-01-01
      • 2018-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多