Android 单击可循环查看图像更改

Android 单击可循环查看图像更改,android,android-recyclerview,Android,Android Recyclerview,我正在制作类似ola的汽车选择功能。在我的例子中,汽车类型(迷你、微型)、汽车选择图像和汽车取消选择图像等汽车详细信息存储在sqlite中,然后我读取数据库并将汽车选择详细信息存储在水平循环视图中。每件事都很好,但我无法选择特定的汽车。当我选择另一个图像时,它会更改为选定的图像,但以前选择的图像不会更改为未选定的图像。有人能帮我解决这个问题吗 下面是我的回收适配器 public class RecycleAdapter extends RecyclerView.Adapter<Recycl

我正在制作类似ola的汽车选择功能。在我的例子中,汽车类型(迷你、微型)、汽车选择图像和汽车取消选择图像等汽车详细信息存储在sqlite中,然后我读取数据库并将汽车选择详细信息存储在水平循环视图中。每件事都很好,但我无法选择特定的汽车。当我选择另一个图像时,它会更改为选定的图像,但以前选择的图像不会更改为未选定的图像。有人能帮我解决这个问题吗

下面是我的回收适配器

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

ListItemClickListener mlistener;
Context mCtx;
Cursor mCursor;
private int clickposition = 0;


public RecycleAdapter(Context context, ListItemClickListener listener) {
    mCtx = context;
    mlistener = listener;
}

@Override
public RecycleAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_vehicles_available, parent, false);
    ViewHolder vh = new ViewHolder(view);
    return vh;
}

@Override
public void onBindViewHolder(RecycleAdapter.ViewHolder holder, int position) {

    mCursor.moveToPosition(position);
    String carType = mCursor.getString(mCursor.getColumnIndex(COLUMN_SERVICE));
    holder.carType.setText(carType);

    byte[] image = mCursor.getBlob(mCursor.getColumnIndex(COLUMN_IMAGE));
    Bitmap bitmap = BitmapFactory.decodeByteArray(image, 0, image.length);
    holder.carImage.setImageBitmap(bitmap);

}

@Override
public int getItemCount() {
    if (mCursor == null)
        return 0;
    return mCursor.getCount();
}

public void swapCursor(Cursor data) {
    mCursor = data;
    notifyDataSetChanged();
}

public interface ListItemClickListener {

    void onClickListener(int position);
}

public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    TextView carType;

    ImageView carImage;
    RelativeLayout rl;

    public ViewHolder(View itemView) {
        super(itemView);
        carType = (TextView) itemView.findViewById(R.id.txtcarType);
        carImage = (ImageView) itemView.findViewById(R.id.select_carImage);
        rl = (RelativeLayout) itemView.findViewById(R.id.rl);
        rl.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.rl:
                clickposition = getAdapterPosition();
                Log.d("clickposition", String.valueOf(clickposition));
                int i;
                for (i = 0; i < mCursor.getCount(); i++) {

                    int id = mCursor.getInt(mCursor.getColumnIndex(DbContract.DbEntry._ID));
                    mlistener.onClickListener(id);
                    if (clickposition != i) {
                        mCursor.moveToPosition(i);
                        Log.d("clickposition1", String.valueOf(i));
                        byte[] image = mCursor.getBlob(mCursor.getColumnIndex(COLUMN_IMAGE));
                        Bitmap bitmap = BitmapFactory.decodeByteArray(image, 0, image.length);
                        carImage.setImageBitmap(bitmap);
                    }
                    mCursor.moveToPosition(i);
                    Log.d("clickposition2", String.valueOf(i));
                    byte[] image_sel = mCursor.getBlob(mCursor.getColumnIndex(COLUMN_IMAGE_SELECTED));
                    Bitmap bitmap_sel = BitmapFactory.decodeByteArray(image_sel, 0, image_sel.length);
                    carImage.setImageBitmap(bitmap_sel);

                }

                Toast.makeText(mCtx, "driverlocation = Firebase.getreference" + mCursor.getString(mCursor.getColumnIndex(COLUMN_SERVICE)), Toast.LENGTH_SHORT).show();
                break;
        }
    }

}

}
公共类RecycleAdapter扩展了RecyclerView.Adapter{ ListItemClickListenerMLListener; 上下文mCtx; 光标mCursor; 私有int clickposition=0; 公共RecycleAdapter(上下文上下文,ListItemClickListener侦听器){ mCtx=上下文; mlistener=监听器; } @凌驾 public RecycleAdapter.ViewHolder onCreateViewHolder(视图组父级,int-viewType){ View View=LayoutInflater.from(parent.getContext())。充气(R.layout.layout\u vehicles\u available,parent,false); ViewHolder vh=新的ViewHolder(视图); 返回vh; } @凌驾 BindViewHolder上的公共无效(RecycledAdapter.ViewHolder,int位置){ 移动位置(位置); String carType=mCursor.getString(mCursor.getColumnIndex(COLUMN_服务)); holder.carType.setText(carType); 字节[]image=mCursor.getBlob(mCursor.getColumnIndex(COLUMN_image)); 位图位图=位图工厂.decodeByteArray(图像,0,图像.length); holder.carImage.setImageBitmap(位图); } @凌驾 public int getItemCount(){ if(mCursor==null) 返回0; 返回mCursor.getCount(); } 公共无效swapCursor(光标数据){ mCursor=数据; notifyDataSetChanged(); } 公共接口ListItemClickListener{ void onClickListener(int位置); } 公共类ViewHolder扩展了RecyclerView.ViewHolder实现了View.OnClickListener{ 文本视图类型; 图像视图carImage; 相对寿命; 公共视图持有者(视图项视图){ 超级(项目视图); carType=(TextView)itemView.findViewById(R.id.txtcarType); carImage=(ImageView)itemView.findViewById(R.id.select\u carImage); rl=(RelativeLayout)itemView.findViewById(R.id.rl); rl.setOnClickListener(此); } @凌驾 公共void onClick(视图v){ 开关(v.getId()){ 案例R.id.rl: 单击位置=getAdapterPosition(); Log.d(“clickposition”,String.valueOf(clickposition)); int i; 对于(i=0;i

将onBindViewholder更改为此

@Override
public void onBindViewHolder(RecycleAdapter.ViewHolder holder, int position) {

mCursor.moveToPosition(position);
String carType = mCursor.getString(mCursor.getColumnIndex(COLUMN_SERVICE));
holder.carType.setText(carType);

byte[] image = mCursor.getBlob(mCursor.getColumnIndex(COLUMN_IMAGE));
Bitmap bitmap = BitmapFactory.decodeByteArray(image, 0, image.length);
holder.carImage.setImageBitmap(bitmap);

holder.rl.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            clickposition = position;
            Log.d("clickposition", String.valueOf(clickposition));
            int i;
            for (i = 0; i < mCursor.getCount(); i++) {

                int id = mCursor.getInt(mCursor.getColumnIndex(DbContract.DbEntry._ID));
                mlistener.onClickListener(id);
                if (clickposition != i) {
                    mCursor.moveToPosition(i);
                    Log.d("clickposition1", String.valueOf(i));
                    byte[] image = mCursor.getBlob(mCursor.getColumnIndex(COLUMN_IMAGE));
                    Bitmap bitmap = BitmapFactory.decodeByteArray(image, 0, image.length);
                    carImage.setImageBitmap(bitmap);
                }
                mCursor.moveToPosition(i);
                Log.d("clickposition2", String.valueOf(i));
                byte[] image_sel = mCursor.getBlob(mCursor.getColumnIndex(COLUMN_IMAGE_SELECTED));
                Bitmap bitmap_sel = BitmapFactory.decodeByteArray(image_sel, 0, image_sel.length);
                carImage.setImageBitmap(bitmap_sel);

            }

            Toast.makeText(mCtx, "driverlocation = Firebase.getreference" + mCursor.getString(mCursor.getColumnIndex(COLUMN_SERVICE)), Toast.LENGTH_SHORT).show();
        }
    });

   }
@覆盖
BindViewHolder上的公共无效(RecycledAdapter.ViewHolder,int位置){
移动位置(位置);
String carType=mCursor.getString(mCursor.getColumnIndex(COLUMN_服务));
holder.carType.setText(carType);
字节[]image=mCursor.getBlob(mCursor.getColumnIndex(COLUMN_image));
位图位图=位图工厂.decodeByteArray(图像,0,图像.length);
holder.carImage.setImageBitmap(位图);
holder.rl.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
单击位置=位置;
Log.d(“clickposition”,String.valueOf(clickposition));
int i;
对于(i=0;i