【问题标题】:What is the good and efficient way of Adapter implementation for multiple RecyclerView?多个 RecyclerView 的 Adapter 实现的好和有效的方法是什么?
【发布时间】:2019-08-29 19:11:09
【问题描述】:

在我的应用程序中,我有 4-5 个具有复杂多行类型的 RecyclerView,我使用 viewType 来区分视图。对于它们中的每一个,我确实创建了不同的适配器类,并将这些适配器用于各自的 RecyclerView 并且工作正常。但后来我尝试为我的所有 RecyclerView 只使用一个适配器类,这也可以正常工作。

我想知道的是,对多个适配器类使用一个适配器类是否很好 回收站视图?还是我应该回到以前的方式?

我对所有 RecyclerView 使用一个适配器的方式就是这样。假设我有 4 个 RecyclerView 并且我使用了 4 个适配器,但后来使用一个适配器类,我使用适配器类构造函数将一个额外的变量添加到 adapterType ,并将数据设为 ArrayList<?> ,它接受任何类型的数据。 因此,在适配器初始化之后,我检查adapterType,然后创建该类型的 ViewHolder,并且对于对象调用,我通过其各自的数据类型对对象进行类型转换,该数据类型由adapetType 确定。

下面是我的适配器构造函数:

    public ContestAdapter(List<?> list, Context context, int adapterType) {
        this.list = list;
        this.context = context;
        this.adapterType = adapterType;
        try {
            listener = (ContestAdapterListener) context;
        } catch (ClassCastException e) {
            throw new ClassCastException(context.toString()
                    + " must implement ContestAdapterListener Interface");
        }
    }

下面是我的 Adaper OnCreateViewHolder:

@Override
    public RecyclerView.ViewHolder onCreateViewHolder(
            @NonNull ViewGroup viewGroup,
            int i) {
        View view;
        switch (adapterType) {
            case QUIZ_FRAGMENT_FLAG:
                view = LayoutInflater.from(context)
                        .inflate(R.layout.row_contest_quiz,
                                viewGroup, false);
                return new QuizViewHolder(view);
            case MY_FRAGMENT_FLAG:
                view = LayoutInflater.from(context)
                        .inflate(R.layout.row_contest_points_history,
                                viewGroup, false);
                return new MyPointViewHolder(view);
            case WINNER_FRAGMENT_FLAG:
                if (i == VIEW_TYPE_TEXT) {
                    view = LayoutInflater.from(context)
                            .inflate(R.layout.row_text,
                                    viewGroup, false);
                    return new TextViewHolder(view);
                } else {
                    view = LayoutInflater.from(context)
                            .inflate(R.layout.row_contest_winner,
                                    viewGroup, false);
                    return new WinnerViewHolder(view);
                }
            default:
                view = LayoutInflater.from(context)
                        .inflate(R.layout.row_contest_points,
                                viewGroup, false);
                return new PointsViewHolder(view);
        }
    }

这就是我如何将我的 4-5 RecyclerView 适配器类与一个适配器类结合起来,但我不知道哪个选项好,单独使用 适配器类还是像我一样使用一个适配器类?

【问题讨论】:

    标签: java android performance android-recyclerview


    【解决方案1】:

    【讨论】:

    • 实际上我不是在寻找解决方案,我想知道我使用它的方法是否有效。此外,您建议的链接是通过一个适配器为一个回收器视图使用许多不同的行类型,但实际上我是一个适配器类,用于具有许多不同行类型的许多回收器视图。
    • 完全取决于你的结构,与 RecyclerView 或适配器或任何其他元素无关
    • 当您的项目可以在 recyclerviews 中重复时,您可以获得像 new myadapter 这样的适配器实例,或者使用像 myadapter.getinstance 这样的单调或依赖注入,最好有一个适配器,而当它的不同的多个适配器更好时通过更少的代码更好
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-23
    • 2011-03-20
    • 2013-06-14
    • 1970-01-01
    • 2016-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多