如何在recyclerview中制作和填充公共字段?

时间:2018-02-09 07:50:04

标签: java android android-recyclerview

假设我在JSON文件的不同结构中有一个学生,员工和汽车类。

我已经解析了它们并将相应的数据放到了它的POJO类中。事情是我想在回收者视图中显示数据。 但是在这里,我有三个等级的共同字段是名称和重量。

所以,我想传递给通用到回收站视图的列表,并通过这样调用来填充它们:

tvName.setText(Object(should be generic).getName());
tvWeight.setText(Object(should be generic).getWeight());

它应该显示所有学生,员工和汽车的名称和重量。

RecyclerView 看起来像

---------------------------------------------------------
CarName    
CarWeight
---------------------------------------------------------
EmplyoeeName    
EmplyoeeWeight
---------------------------------------------------------
StudentName    
StudentWeight
---------------------------------------------------------
EmplyoeeName    
EmplyoeeWeight
---------------------------------------------------------
CarName    
CarWeight
---------------------------------------------------------
CarName    
CarWeight
---------------------------------------------------------
StudentName    
StudentWeight

任何想法都会受到高度赞赏。

2 个答案:

答案 0 :(得分:3)

为了实现这一目标,您需要一个名为polymorphism的内容,从StackOverflowJava DocsWikipedia了解更多信息。为了尊重这种模式,我会像这样实现这个问题:

我会创建一个Interface,其中包含您需要的方法:

public interface AttributesInterface {
    String getName();
    double getWeight();
}

然后我会让每个POJO类实现该接口,看起来像这样:

public class Car implements AttributesInterface {
    private String name;
    private double weight;

    @Override
    public String getName() {
        return null;
    }

    @Override
    public double getWeight() {
        return weight;
    }
}

在适配器中,您可以像这样存储列表。如果一个类将实现该接口,那么您将能够在该数组中添加它。因此,您将拥有一个同时包含StudentCarEmployee的数组。

private List<AttributesInterface> list = new ArrayList<>();

然后最后一步是在onBindViewHolder中,您从该数组中获取一个对象并设置相应的值。

AttributesInterface object = list.get(position);
tvName.setText(object.getName());
tvWeight.setText(String.valueOf(object.getWeight())); 

另外,您提到您希望解决方案适用于多个类。只要在每个需要显示的类中实现接口,就可以拥有一百万个类。

答案 1 :(得分:0)

您只能创建一个POJO类,并且可以添加额外的变量,例如 type 。所以你的POJO课程将如下所示。

public class MyClassModel {

    private String type=""; // S=Student, C=Car, E=Employee
    private String  name="", weight=""; 

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getWeight() {
        return weight;
    }

    public void setWeight(String weight) {
        this.weight = weight;
    }   
}

现在您将在RecyclerviewAdapter中输入内容,以便根据数据类型编写逻辑。