早上好,我需要列出具有不同类别的对象的列表,并在此单个回收器视图中列出它们。例如:回收产品,我需要列出土豆,香蕉和牛奶。显然,它们是不同的对象。
由于方法onBindViewHolder,我不知道该怎么做。我需要从列表中获取项目并创建一个对象,以便我可以恢复数据,但我不知道它是牛奶,香蕉还是土豆。
[我的想法是:使用Type String Atribute创建产品类,因此我从列表中恢复该项目,创建一个对象产品,获取类型值,如果等于“ banana”,则创建一个香蕉对象并恢复数据值。这是一个好选择吗?
您可以尝试这种方式
创建一个超类,例如BaseObjectClass
然后使用创建的BaseObject类扩展您的所有类(类A扩展了kotlin类A:BaseObjectClass()中的BaseObjectClass \
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;
}
}
.........................................................
...........................
}
您可以创建一个接口Product
,其中每个类Potato
,Banana
和Milk
都将实现此接口,因此您的适配器将包含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
}
}