Android 一个用于两个活动的回收器适配器

Android 一个用于两个活动的回收器适配器,android,image,android-recyclerview,adapter,Android,Image,Android Recyclerview,Adapter,我用几个不同类别的图片制作应用程序。我想用RecyclerView显示这些图片 我想在以前单击按钮时将按钮显示为图像。 我可以在一个适配器中完成吗?现在我有两个适配器,代码如下: public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> { private int[] images = { R.drawable.imageA1, .... R.drawable

我用几个不同类别的图片制作应用程序。我想用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;
}

}

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

// 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]);
    }  

您需要将映像数组动态地传递给适配器,如下所示

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;
}
}

是的,可能。将adpater中的构造函数设置为:

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

}
diff_映像也是适配器类中的int数组。 并在活动类中创建图像数组。当您按下按钮1时,然后在adpater中传递image1 array;如果您想在两种情况下显示相同的视图,并且如果您想在两种图像上显示不同的视图,则按下按钮2时,然后传递image2 array 如果您的适配器已设置为:

    recycleViewAdapter = new RecyclerAdapter(this, imageArray);
    recyclerView.setAdapter(recycleViewAdapter);
然后,您还可以在适配器类中再创建一个方法,并仅通知适配器更新映像

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

试试这个。

他为什么要这样做?你能详细说明你的答案吗?他想在一个适配器中切换功能。我只是向他展示了一种方法,他可以用简单的if-else和boolean来完成它。例如,他可以在单个适配器中完成。当然,我完全同意,语法是完美的。我考虑了更多为OP/未来用户提供的信息。非常感谢Gudin在我的StartActivity中我有两个按钮可供选择,当用户单击一个按钮时,我会为每个操作打开不同的活动:@Override public void onClickView v{switch v.getId{案例R.id.imageButton1:Intent newActivity1=new IntentStartActivity.this,ActivityOne.class;startActivitynewActivity1;break;案例R.id.imageButton2:Intent newActivity2=new IntentStartActivity.this,ActivityTwo.class;startActivitynewActivity2;break;我该如何将其与回收商批准的图像关联来源?@Pawel在这种情况下。当您从ActivityOne设置适配器时,请在初始化适配器后使用adapter.setImages。从ActivityTwo使用adapter.setImages2。为什么每次单击都要设置适配器?@Eswar正如Pawel所说,他想在上述注释中打开不同活动中的列表。最后,我为每个新活动创建了单独的适配器当用户单击我的开始活动中的按钮时,ich开始。比所有在下面发表评论并提出解决方案的人都要多。当我获得更多经验时,我将使用一个适配器。