0

我有一个问题,即我有一个AdapterRecycler,并在我的构造函数中我有一个列表<>项目,但我有类蛋糕,晚餐,饮料,沙拉和所有这些对象,我不得不扔进列表,因为我必须在代码中的几个地方使用我的AdapterRecycler设计器,但该怎么做?如何将不同对象的列表添加到构造函数中?

例如:

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder>{ 

private List<Cake> cakeList = Collections.emptyList(); 
private List<Dinner> dinnerList = Collections.emptyList(); 
private List<Drinks> drinksList = Collections.emptyList(); 
private List<Salads> saladsList = Collections.emptyList(); 

***//So how to put other lists in one constructor?*** 
// 
*In the code below I still use methods to retrieve Names and Resources, so how do I tell the program to know which list to return? I can't duplicate a constructor with the same parameters, so is there any solution to this problem?* 

public RecyclerAdapter(Activity activity, List<Cake> items) { 
     this.activity = activity; 
     this.cakeList = items; 
    } 

*//I can't do this. So how?* 

public RecyclerAdapter(Activity activity, List<Salads> items) { 
     this.activity = activity; 
     this.saladsList = items; 
    } 

} 

RecyclerAdapter.class

class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> { 




private Activity activity; 
List<Salatki> items = Collections.emptyList(); 

public RecyclerAdapter(Activity activity, List<Salatki> items) { 
    this.activity = activity; 
    this.items = items; 
} 

private Listener listener; 


public static interface Listener { 
    public void onClick(int position); 
} 

public static class ViewHolder extends RecyclerView.ViewHolder { 
    private CardView cardView; 
    public ViewHolder(CardView v) { 
     super(v); 
     cardView=v; 
    } 
} 


public void setListener(Listener listener) { 
    this.listener = listener; 
} 

@Override 
public CaptionedImagesAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    CardView cv = (CardView) LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.card_captioned_image, parent, false); 
    return new ViewHolder(cv); 

} 

@Override 
public void onBindViewHolder(ViewHolder holder, final int position) { 
     CardView cardView = holder.cardView; 
     ImageView imageView = (ImageView)cardView.findViewById(R.id.info_image); 

     Drawable drawable = cardView.getResources().getDrawable(items.get(position).getImageResourceId()); 
     imageView.setImageDrawable(drawable); 
     imageView.setContentDescription(items.get(position).getName()); 

     TextView textView = (TextView)cardView.findViewById(R.id.info_text); 
     textView.setText(items.get(position).getName()); 


    cardView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if(listener != null) { 
       listener.onClick(position); 
      } 
     } 
    }); 
} 

@Override 
public int getItemCount() { 
    return items.size(); 
} 
} 

回答

0

创建具有方法的基类 “的getName()” 和 “getResourceId()”,然后在适配器使用它。

class Food { 
    private String name; 
    private int resourceId; 
    // getters/setters 
} 

class Cake extends Food { 

} 

class Dinner extends Food { 

} 

然后在您的Adapter中使用List<Food>类型的字段。

UPD。适配器的构造:

public <T extends Food> RecyclerAdapter(Activity activity, List<T> items) { 
    this.activity = activity; 
    this.items = new ArrayList<>(); 
    for (Food item : items) { 
     this.items.add(item); 
    } 
} 
+0

感谢您的回答,但它仍然无法正常工作。 当我尝试使用适配器时,它得到的答案是java.util.List 不能应用于java.util.List etc ... – newActivity21

+0

我更新了答案如何更改Adapter构造函数。 –

0

我相信,你的适配器类必须考虑的项目列表作为它的构造函数的参数。事情是这样的:

public class Item { 
    final String name; 
    final int resId; 
    public Item(String name, int resId){ 
    this.name=name; 
    this.resId=resId; 
    } 
} 

,你构造器是这样的:

public RecyclerAdapter(Activity activity, List<Item> items) { 
    this.activity = activity; 
    this.items = items; 
} 

然后创建您的适配器尝试地图你的食物清单和所有的人都加入到一个单一的名单像在此之前:

List<Item> items=new ArrayList(); 
for(Cake c: cakes){ 
    items.add(new Item(c.name,c.resId)); 
} 
//same for the rest food lists 

此外,如果您想了解适配器内部的物品属于哪种食物,请添加一个属性,例如type(可能是枚举)到项目的类

+0

非常感谢您的回答。这个解决方案非常棒。 – newActivity21

相关问题