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

相關問題