recyclerview中的不同对象

问题描述 投票:0回答:2

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

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

[我的想法是:使用Type String Atribute创建产品类,因此我从列表中恢复该项目,创建一个对象产品,获取类型值,如果等于“ banana”,则创建一个香蕉对象并恢复数据值。这是一个好选择吗?

java android list android-recyclerview recycler-adapter
2个回答
0
投票

您可以尝试这种方式

  1. 创建一个超类,例如BaseObjectClass

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

  3. 现在为BaseObject类型(列表)的recyclerview创建列表创建列表时
  4. 在onBindViewHolder中,使用方法((item)instanceof(A))检查对象的类型,等等。
abstract class BaseObject {
}

class A extends  BaseObject{

}

class B extends BaseObject{

}

class C extends BaseObject{

}


class TestRecyclerViewAdatper extends RecyclerView.Adapter<RecyclerView.ViewHolder>{
............................................
    List<BaseObject> list = new ArrayList<BaseObject>();
................................................
@Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
        BaseObject item = list.get(position);
        if(item instanceof A){
            A a = (A) item;
        }else if(item instanceof B){
            B b = (B) item;

        }
    }

.........................................................
...........................
}


0
投票

您可以创建一个接口Product,其中每个类PotatoBananaMilk都将实现此接口,因此您的适配器将包含Products的列表。

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

如果您需要以不同的方式处理每个类(例如,您需要仅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
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.