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

时间:2015-05-11 08:05:38

标签: java android alertdialog

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

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

在SO中阅读了一些帖子后,我看到有几个人反对它,例如不要在适配器内部使用这种方法(特别是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 个答案:

答案 0 :(得分:1)

  1. 没有表现出色。
  2. 在适配器类中放置方法没有直接的性能影响。这是一个java类,就像任何其他类一样,只是为它实现必要的类作为适配器。无论是将对话创建者/数据库查找放在他们自己的类中,还是将它们放在适配器中......都不会影响性能。

    1. 缓存数据库结果。
    2. 也就是说,频繁调用适配器方法。例如,滚动listView适配器会创建几十个调用来创建子视图,如果你在其中一个被大量调用的方法中包装数据库调用,它就可以很好地挂起。您可以采取一些措施来解决此问题,例如使用单个查找来缓存数据库值等等。

      1. 将课程移出课堂是关于访问和模块化设计。
      2. 如果其他事情将要调用数据库,并且逻辑不是适配器所特有的,那么它应该被放置在其他类方法可以访问它的区域中,而不需要具有适配器的实例,甚至不需要适配器类作为项目的一部分。