Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java recyclerview中的不同对象_Java_Android_List_Android Recyclerview - Fatal编程技术网

Java recyclerview中的不同对象

Java recyclerview中的不同对象,java,android,list,android-recyclerview,Java,Android,List,Android Recyclerview,早上好, 我需要制作一个包含不同类对象的列表,并在这个单一回收器视图中列出它们。例如:回收产品,我需要列出土豆、香蕉和牛奶。显然,它们是不同的对象 我不知道怎么做,因为方法是onBindViewHolder。我需要从列表中获取项目并创建一个对象,以便恢复数据,但我不知道它是牛奶、香蕉还是土豆 我的想法是:用类型字符串Atribute创建产品类,这样我就可以从列表中恢复项目,创建一个对象产品,获取类型值,如果等于“banana”,我就创建一个banana对象并恢复数据值。这是一个好的选择吗?你可以

早上好, 我需要制作一个包含不同类对象的列表,并在这个单一回收器视图中列出它们。例如:回收产品,我需要列出土豆、香蕉和牛奶。显然,它们是不同的对象

我不知道怎么做,因为方法是onBindViewHolder。我需要从列表中获取项目并创建一个对象,以便恢复数据,但我不知道它是牛奶、香蕉还是土豆

我的想法是:用类型字符串Atribute创建产品类,这样我就可以从列表中恢复项目,创建一个对象产品,获取类型值,如果等于“banana”,我就创建一个banana对象并恢复数据值。这是一个好的选择吗?

你可以这样试试

  • 创建一个超级类,比如BaseObjectClass

  • 然后使用创建的BaseObject类扩展所有类(类A扩展了kotlin类A中的BaseObjectClass\ BaseObjectClass())

  • 现在,当您为recyclerview创建列表时,请查看BaseObject类型的创建列表(列表)
  • 在onBindViewHolder中,使用方法((项)instanceof(A))等检查对象的类型
  • 抽象类BaseObject{
    }
    类扩展了BaseObject{
    }
    类B扩展了BaseObject{
    }
    类C扩展了BaseObject{
    }
    类TestRecycleServiceWatper扩展了RecycleView.Adapter{
    ............................................
    列表=新的ArrayList();
    ................................................
    @凌驾
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder,int位置){
    BaseObject项=list.get(位置);
    如果(A的项目实例){
    A=(A)项目;
    }else if(B的项目实例){
    B=(B)项目;
    }
    }
    .........................................................
    ...........................
    }
    
    你可以用这种方法试试

  • 创建一个超级类,比如BaseObjectClass

  • 然后使用创建的BaseObject类扩展所有类(类A扩展了kotlin类A中的BaseObjectClass\ BaseObjectClass())

  • 现在,当您为recyclerview创建列表时,请查看BaseObject类型的创建列表(列表)
  • 在onBindViewHolder中,使用方法((项)instanceof(A))等检查对象的类型
  • 抽象类BaseObject{
    }
    类扩展了BaseObject{
    }
    类B扩展了BaseObject{
    }
    类C扩展了BaseObject{
    }
    类TestRecycleServiceWatper扩展了RecycleView.Adapter{
    ............................................
    列表=新的ArrayList();
    ................................................
    @凌驾
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder,int位置){
    BaseObject项=list.get(位置);
    如果(A的项目实例){
    A=(A)项目;
    }else if(B的项目实例){
    B=(B)项目;
    }
    }
    .........................................................
    ...........................
    }
    
    您可以创建一个接口
    产品
    ,其中每个类
    土豆
    香蕉
    牛奶
    将实现此接口,因此适配器将包含一个
    产品的列表

    如果所有项目都以相同的方式表示(例如名称+图像)-将这些属性添加到界面中,一切都会变得简单

    如果您需要以不同方式处理每个类(例如,您需要一个只有class
    Milk
    具有的特定属性),您可以在
    onBindViewHolder
    方法上检查哪个类是您当前的产品,如下所示:

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
        Product currentProduct = productLst.get(position);
        if (currentProduct instanceof Banana) {
            // this is a banana
        } else if (currentProduct instanceof Milk){
            // this is milk
        } else if (currentProduct instanceof Potato){
            // this is Potato
        }
    }
    

    您可以创建一个接口
    产品
    ,其中每个类
    土豆
    香蕉
    牛奶
    将实现此接口,因此适配器将包含
    产品的列表

    如果所有项目都以相同的方式表示(例如名称+图像)-将这些属性添加到界面中,一切都会变得简单

    如果您需要以不同方式处理每个类(例如,您需要一个只有class
    Milk
    具有的特定属性),您可以在
    onBindViewHolder
    方法上检查哪个类是您当前的产品,如下所示:

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
        Product currentProduct = productLst.get(position);
        if (currentProduct instanceof Banana) {
            // this is a banana
        } else if (currentProduct instanceof Milk){
            // this is milk
        } else if (currentProduct instanceof Potato){
            // this is Potato
        }
    }
    

    您应该研究多态性。我建议您应该创建一个模型类(对象类),例如MainObject.class。现在,您需要创建另一个类的对象,让我们以Banana类为例,因此需要在MainObject中添加Banana Banana=new Banana()。您应该研究多态性。我建议您应该创建一个模型类(对象类),例如,让我们说MainObject.class。现在您需要创建另一个类的对象,让我们以香蕉类为例,因此需要在MainObject中添加Banana Banana=new Banana()。感谢您的帮助,这解决了问题。感谢您的帮助,这解决了问题。