我正在使用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();
}
}
答案 0 :(得分:1)
在适配器类中放置方法没有直接的性能影响。这是一个java类,就像任何其他类一样,只是为它实现必要的类作为适配器。无论是将对话创建者/数据库查找放在他们自己的类中,还是将它们放在适配器中......都不会影响性能。
也就是说,频繁调用适配器方法。例如,滚动listView适配器会创建几十个调用来创建子视图,如果你在其中一个被大量调用的方法中包装数据库调用,它就可以很好地挂起。您可以采取一些措施来解决此问题,例如使用单个查找来缓存数据库值等等。
如果其他事情将要调用数据库,并且逻辑不是适配器所特有的,那么它应该被放置在其他类方法可以访问它的区域中,而不需要具有适配器的实例,甚至不需要适配器类作为项目的一部分。