我有一个ViewPager
,其中四个Fragment
中有3个几乎相同。它们显示带有图像的GridLayout
,并在每个图像下方显示文本。我已经为其中之一完成了代码。
我使用Retrofit
服务从服务器获取数据。对象是相同的,除了1-2个字段,我只需要使用它们进行反序列化。
对象之一的示例:
public class TagsItem implements Serializable{
@SerializedName("post_id")
private String postId;
@SerializedName("account_id")
private int accountId;
private String tags;
private String description;
private String image;
private String name;
// removed getters/setters for brevity
}
我只需要每个班级的图像和名称。
我想对每个适配器使用相同的适配器,因为它们不需要为每个组件单独布置。这只是图像和名称。
我应该如何以更通用的形式声明Adapter,以便可以全部使用3?
现在,适配器的代码为:
public class TagsAdapter extends RecyclerView.Adapter<TagsAdapter.ViewHolder> {
private Context context;
private List<TagsItem> dataset;
public TagsAdapter(Context context) {
this.context = context;
dataset = new ArrayList<>();
}
// more adapter code
}
如您所见,名称为
TagsAdapter
,数据集类型为TagsItem
最佳答案
最简单的方法是为所有不同的对象创建一个公共接口。由于您说的是您需要的只是“图像”和“名称”属性,因此可能是这样的:
interface NamedImage {
public String getImage();
public String getName();
}
然后,适配器要显示的每个类都将实现该接口。
然后,您只需更改adapater即可使用NamedImage而不是TagsItem