在适配器中写下太多方法是不是一个坏主意?
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();
}
}
- 没有性能影响。
将方法放入适配器中不会直接影响性能 class。这是一个 java class,与其他任何东西一样,它只是实现了必要的 classes 以使其作为适配器运行。无论您是将对话创建者/数据库查找放在它们自己的 class 中,还是将它们留在适配器中……在性能方面都无关紧要。
- 缓存数据库结果。
也就是说,适配器方法会被频繁调用。例如,滚动 listView 适配器会创建许多调用来创建子视图,如果您将数据库调用包装在这些被频繁调用的方法之一中,它很可能会挂起。您可以采取一些措施来解决此问题,例如缓存数据库值、使用单次查找等...
- 将方法移出 class 是关于访问和模块化设计。
如果其他东西要调用数据库,并且逻辑不是适配器独有的,则应将其放置在其他 class 方法无需实例即可访问它的区域适配器甚至将适配器 class 作为项目的一部分。
我正在使用 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();
}
}
- 没有性能影响。
将方法放入适配器中不会直接影响性能 class。这是一个 java class,与其他任何东西一样,它只是实现了必要的 classes 以使其作为适配器运行。无论您是将对话创建者/数据库查找放在它们自己的 class 中,还是将它们留在适配器中……在性能方面都无关紧要。
- 缓存数据库结果。
也就是说,适配器方法会被频繁调用。例如,滚动 listView 适配器会创建许多调用来创建子视图,如果您将数据库调用包装在这些被频繁调用的方法之一中,它很可能会挂起。您可以采取一些措施来解决此问题,例如缓存数据库值、使用单次查找等...
- 将方法移出 class 是关于访问和模块化设计。
如果其他东西要调用数据库,并且逻辑不是适配器独有的,则应将其放置在其他 class 方法无需实例即可访问它的区域适配器甚至将适配器 class 作为项目的一部分。