Android 如何在适配器外部使用相同的getView/onBindView代码而不重复它

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显示来自适配器或其他任何位置的单个项目 谢谢在我写的一篇文

我想知道如何更有效地重用一些代码来显示一个视图,该视图将适应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);