java - 对多个几乎相似的 fragment 重复使用相同的适配器

标签 java android generics

我有一个 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

} 

我只需要每个类(class)的图像和姓名。

如果可以为每个项目使用相同的适配器,我想使用相同的适配器,因为他们不需要为每个项目使用单独的布局。这只是图像和名称。

我应该如何以更通用的形式声明适配器,以便它可以全部使用 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

最佳答案

最直接的方法是为所有不同的对象创建一个公共(public)接口(interface)。既然您说您需要的只是“图像”和“名称”属性,那么它可能是这样的:

interface NamedImage {
 public String getImage();
 public String getName();
}

适配器要显示的每个类都会实现该接口(interface)。

然后您只需更改适配器即可使用 NamedImage 而不是 TagsItem

关于java - 对多个几乎相似的 fragment 重复使用相同的适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41535473/

相关文章:

java - 我如何使用 Hibernate/JPA 在插入/更新/删除之前告诉数据库用户是谁?

java - 2 个 double 组的高效比较与容差 - Java

java - 如何在Java中将1个文件程序分解为多个类?

android-layout - 如何从 android studio 的单个可绘制文件夹中检测多个分辨率图像

javascript - touchmove 后 Touchend 不触发

scala - 为什么所有不变的泛型类位置在 Scala 的类型参数列表中都是不变的?

Scala:通用函数乘以不同类型的数字

java - 根据电子邮件域识别组织?

android - 如何在特定设备上运行命令 'ionic run android'?

java - 泛型类型的 Autowiring 不起作用 [Spring 4+]