Android 如何在适配器外部使用相同的getView/onBindView代码而不重复它
我想知道如何更有效地重用一些代码来显示一个视图,该视图将适应getView()[BaseAdapter]、onBindView()[RecyclerView]或onCreateView()[Fragment]来填充视图 自定义RecyclerView适配器,用于填充整个CardView列表 现在,我还想以完全相同的方式在该适配器外部填充单个cardView,而不需要维护此布局的两个副本,您建议我怎么做 SingleItemFragment显示来自适配器或其他任何位置的单个项目Android 如何在适配器外部使用相同的getView/onBindView代码而不重复它,android,android-fragments,adapter,android-recyclerview,Android,Android Fragments,Adapter,Android Recyclerview,我想知道如何更有效地重用一些代码来显示一个视图,该视图将适应getView()[BaseAdapter]、onBindView()[RecyclerView]或onCreateView()[Fragment]来填充视图 自定义RecyclerView适配器,用于填充整个CardView列表 现在,我还想以完全相同的方式在该适配器外部填充单个cardView,而不需要维护此布局的两个副本,您建议我怎么做 SingleItemFragment显示来自适配器或其他任何位置的单个项目 谢谢在我写的一篇文
谢谢在我写的一篇文章中,我也遇到了类似的问题。解决方案是将视图创建和视图绑定与
适配器
解耦,并将其放在每个视图/元素/回收视图项的单个类中
所以我实现了一个泛型,它接受实现接口的任何类(我称之为)。此接口定义了为RecyclerView
创建视图所需的方法定义类型并处理所有操作。基本上,以下是最重要的:
int getType();
int getLayoutRes();
View generateView(Context ctx);
View generateView(Context ctx, ViewGroup parent);
VH getViewHolder(ViewGroup parent);
void bindView(VH holder);
适配器能够获取该项的任何实现,并将其可视化。项
的好处在于,您甚至可以通过generateView
方法使用这些项,而无需使用RecyclerView
为了使它更加灵活和易于实现,我添加了
您可以在此处看到整个实现:
除了项
概念之外,它还提供了许多在具有RecyclerView
s的项目中最常用的功能。大多数事情都非常通用,以允许尽可能高的灵活性
实现应该让您大致了解如何实现您的需求(或者您可以使用库)。
您将需要:
-“项目”的接口
-能够处理这些“项”的适配器
-“项”-提供RecyclerView
适配器所需方法的实现
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflating the root view
View rootView = inflater.inflate(R.layout.single_cardview_layout,
container, false);
/* Repeated Code */
if (thing.getIcon() == 0) {
viewHolder.thingIcon.setImageResource(0);
} else {
viewHolder.thingIcon.setImageResource(ThingIconSet
.getIconResId(thing.getIcon()));
}
int getType();
int getLayoutRes();
View generateView(Context ctx);
View generateView(Context ctx, ViewGroup parent);
VH getViewHolder(ViewGroup parent);
void bindView(VH holder);