一个RecyclerAdapter用于两项活动

时间:2017-01-20 11:22:43

标签: android image android-recyclerview adapter

我使用几种不同类别的图片制作应用。我想用RecyclerView显示这些图片。

我想在之前单击按钮时将按钮显示为图像。 我可以在一个适配器中制作吗?现在我有两个适配器,代码如下:

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> {
private int[] images = {
   R.drawable.imageA1, ....    R.drawable.imageA10
};
private int[] images2 = {
        R.drawable.imageB1, ....    R.drawable.imageB10
  };

class ViewHolder extends RecyclerView.ViewHolder{

    public int currentItem;
    public ImageView itemImage, itemImage2;
    public TextView itemTitle;

    public ViewHolder(View itemView) {
        super(itemView);
        itemImage = (ImageView)itemView.findViewById(R.id.imageView);
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    View v = LayoutInflater.from(viewGroup.getContext())
            .inflate(R.layout.article_layout, viewGroup, false);
    ViewHolder viewHolder = new ViewHolder(v);
    return viewHolder;
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, int i) {
    viewHolder.itemImage.setImageResource(images[i]);
     }
@Override
public int getItemCount() {
    return images.length;
}

}

3 个答案:

答案 0 :(得分:1)

您可以在用户单击按钮时调用适配器中的方法:

// for button A
public void setImages() { 
  this.showImages = true;
}

// for button B
public void setImages2() {
  this.showImages = false;
}

然后修改on bind方法以绑定适当的图像:

@Override
public void onBindViewHolder(ViewHolder viewHolder, int i) {
    if (this.showImages)
        viewHolder.itemImage.setImageResource(images[i]);
    else
        viewHolder.itemImage.setImageResource(images2[i]);
    }  

答案 1 :(得分:0)

您需要将图像数组动态传递到适配器,如下所示

private int[] images = {
   R.drawable.imageA1, ....    R.drawable.imageA10
};
private int[] images2 = {
        R.drawable.imageB1, ....    R.drawable.imageB10
  };

点击按钮A

RecyclerAdapter myAdapter = new RecyclerAdapter(images)
yourRecyclerview.setAdapter(myAdapter )

点击按钮B

RecyclerAdapter myAdapter = new RecyclerAdapter(images2)
yourRecyclerview.setAdapter(myAdapter )

按以下方式更改适配器

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> {
private int[] images = new int[];

public RecyclerAdapter(int[] imgs){
images = imgs;
}

class ViewHolder extends RecyclerView.ViewHolder{

    public int currentItem;
    public ImageView itemImage, itemImage2;
    public TextView itemTitle;

    public ViewHolder(View itemView) {
        super(itemView);
        itemImage = (ImageView)itemView.findViewById(R.id.imageView);
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    View v = LayoutInflater.from(viewGroup.getContext())
            .inflate(R.layout.article_layout, viewGroup, false);
    ViewHolder viewHolder = new ViewHolder(v);
    return viewHolder;
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, int i) {
    viewHolder.itemImage.setImageResource(images[i]);
     }
@Override
public int getItemCount() {
    return images.length;
}
}

答案 2 :(得分:0)

是的可能。在adpater中创建构造函数:

 public  RecyclerAdapter(Context context,int[] images)
{
    this.diff_images=images;
    this.context=context;

}

diff_images也是适配器类中的int数组。 并在您的活动类中创建图像数组。当你按下按钮1然后在adpater中传递image1数组,如果按下按钮2然后传递image2数组(如果你想为两种情况显示相同的视图,如果你想为两个图像显示不同的视图)
如果您的适配器已设置为:

    recycleViewAdapter = new RecyclerAdapter(this, imageArray);
    recyclerView.setAdapter(recycleViewAdapter);

然后您还可以在适配器类中再创建一个方法,并仅通知适配器以获取更新映像

  public void setNewImageList(Context context, int[] imageArray) {
    this.context = context;
    this.diff_images = imageArray;
    notifyDataSetChanged();
}

试试这个。