在适配器中写下太多方法是不是一个坏主意?

is it a bad idea to write down too many methods inside adapter?

我正在使用 RecyclerView 填充我的 CardView。在 CardView 中,单击每张卡片后,我想显示一个包含 4 个字段的自定义 AlertDialog 框。一旦用户填写并提交,我就会更新我的数据库。

现在一切正常。唯一的问题是,我使用的所有这些方法(AlerDialog、查询数据库等)都在我的 RecyclerView Adapter 中。

在阅读 SO 中的一些帖子后,我看到有几个人反对它,例如不要在 Adapter 中删除这些方法(特别是 Dialog)。所以,我的问题是,我是应该重写我的代码,还是在性能方面完全相同?

下面是我的适配器的一部分:

public class CardHolderAdapter extends RecyclerView.Adapter<CardHolderAdapter.CardViewHolder>{    

    ====== CONSTRUCTOR ========

    ====== VIEW HOLDER ========

    ====== onCreateViewHolder METHOD ========

    @Override
    public void onBindViewHolder(CardHolderAdapter.CardViewHolder holder, final int position) {
        holder.textViewBookname.setText(cardHolderList.get(position).getTitle());
        ...............
        ...............
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                alertDialogWishlist(String ... args).show();
            }
        });
    }

    @Override
    public int getItemCount() {
        return cardHolderList.size();
    }

    public Dialog alertDialogWishlist(String ... args){
        AlertDialog.Builder myDialog = new AlertDialog.Builder(context);
        View layout = LayoutInflater.from((ActivityMyList) context).inflate(R.layout.alert_dialog_mylist_wishlist, null);

        // DATABASE QUERY TO FETCH CUSTOM FIELDS VALUES (4 FILEDS IN TOTAL)

        layout.findViewById(R.id.field1).setText(val1)
        .....................
        .....................

        myDialog.setView(layout)
                .setTitle(title)
                .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.cancel();
                    }
                })
                .setPositiveButton(title, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        // DATABASE CONNECTION TO UPDATE NEW VALUES
                    }
                });
        return myDialog.create();
    }
}
  1. 没有性能影响。

将方法放入适配器中不会直接影响性能 class。这是一个 java class,与其他任何东西一样,它只是实现了必要的 classes 以使其作为适配器运行。无论您是将对话创建者/数据库查找放在它们自己的 class 中,还是将它们留在适配器中……在性能方面都无关紧要。

  1. 缓存数据库结果。

也就是说,适配器方法会被频繁调用。例如,滚动 listView 适配器会创建许多调用来创建子视图,如果您将数据库调用包装在这些被频繁调用的方法之一中,它很可能会挂起。您可以采取一些措施来解决此问题,例如缓存数据库值、使用单次查找等...

  1. 将方法移出 class 是关于访问和模块化设计。

如果其他东西要调用数据库,并且逻辑不是适配器独有的,则应将其放置在其他 class 方法无需实例即可访问它的区域适配器甚至将适配器 class 作为项目的一部分。