android中自定义列表视图中的错误按钮侦听器检测



我有一个自定义列表视图,上面有一些按钮。在点击每个按钮时,我会将其颜色更改为例如第一个按钮的灰色到红色;灰色至绿色表示第二个按钮,灰色至蓝色表示第三个按钮等。

为此,我使用了视图夹模式。当点击按钮时,我不会改变相应按钮的颜色。单击每个按钮时,仅第一行&最后一行按钮的颜色已更改。

这是我的代码:

public class LocationInspectionAdapter extends
            ArrayAdapter<LocationInspectionBean> {
        private final Activity context;
        private final int layoutResourceId;
        private static final int CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE = 100;
         ViewHolder holder;
        Uri uri;
        String fname;
        File image, imagesFolder;
        Bitmap bp = null;
        // static Context c;
        View v;
        // private Uri fileUri;
        Integer count;
        private ArrayList<LocationInspectionBean> values = new ArrayList<LocationInspectionBean>();
        public LocationInspectionAdapter(Activity context,
                int layoutResourceId, ArrayList<LocationInspectionBean> values) {
            super(context, layoutResourceId, values);
            this.context = context;
            this.values = values;
            this.layoutResourceId = layoutResourceId;
            notifyDataSetChanged();
            Log.i("Home", "enter");
        }
        public class ViewHolder {
            TextView componentName, count_text;
            ImageView camra, red_circle;
            Button clean, dirty, na, dc, notes;
        }

GetView方法:

@Override
        public View getView(final int position, View convertView, ViewGroup parent) {
            select_postion=position;
            Log.i("error","select--"+select_postion);
            note_pos = position;
             View rowView = convertView;
             if (convertView == null) 
             {
                    LayoutInflater inflater = context.getLayoutInflater();
                    rowView = inflater.inflate(layoutResourceId, null, true);
                    holder = new ViewHolder();
                    holder.componentName = (TextView) rowView
                            .findViewById(R.id.location_list_row);
                    holder.clean = (Button) rowView.findViewById(R.id.btn1);
                    holder.dirty = (Button) rowView.findViewById(R.id.btn2);
                    holder.dc = (Button) rowView.findViewById(R.id.btn3);
                    holder.na = (Button) rowView.findViewById(R.id.btn4);
                    holder.camra = (ImageView) rowView.findViewById(R.id.btn5);
                    holder.camra.setTag(position);
                    holder.notes = (Button) rowView.findViewById(R.id.btn6);
                    holder.count_text = (TextView) rowView
                            .findViewById(R.id.circle_count);
                    holder.red_circle = (ImageView) rowView.findViewById(R.id.img_red);
                    // String img = location_obj.getImages();
                    // Log.i("IMG", img);
                    holder.clean.setTag(position);
                    holder.camra.setTag(position);
                    holder.na.setTag(position);
                    holder.dc.setTag(position);
                    holder.notes.setTag(position);
                    holder.dirty.setTag(position);

                    rowView.setTag(holder);
             
             }
             else 
             {
                    holder=(ViewHolder)rowView.getTag();
             }
             
                    LocationInspectionBean location_obj = values.get(position);
                    if (location_inspection_array.get(position).getImages() != null) {
                        imgpath = location_inspection_array.get(position).getImages();
                        imgpath1 = imgpath.split(",");
                        count = imgpath1.length;
                        holder.red_circle.setVisibility(View.VISIBLE);
                        holder.count_text.setVisibility(View.VISIBLE);
                        holder.count_text.setText(String.valueOf(count));
                    }
                    final String a = String.valueOf(position);
                    holder.componentName.setText(location_obj.getComp_name());
                    if (location_obj.getInspectionstatus().equalsIgnoreCase("1")) {
                        holder.clean.setBackgroundColor(Color.parseColor("#1C6614"));
                    }
                    if (location_obj.getInspectionstatus().equalsIgnoreCase("3")) {
                        holder.dirty.setBackgroundColor(Color.parseColor("#FC4E3B"));
                    }
                    if (location_obj.getInspectionstatus().equalsIgnoreCase("4")) {
                        holder.na.setBackgroundColor(Color.parseColor("#0D6CC3"));
                    }
                    if (location_obj.getInspectionstatus().equalsIgnoreCase("2")) {
                        holder.dc.setBackgroundColor(Color.parseColor("#E87403"));
                    }
                    if (location_obj.getNotes().isEmpty()) {
                        holder.dirty.setBackgroundColor(Color.parseColor("#8A8787"));
                    }
                    if (location_obj.getNotes().isEmpty()) {
                        holder.dc.setBackgroundColor(Color.parseColor("#8A8787"));
                    }

                    holder.clean.setOnTouchListener(new OnTouchListener() {
                        @Override
                        public boolean onTouch(View v, MotionEvent event) {
                            // TODO Auto-generated method stub
                            index = (Integer)v.getTag();
                            //  Log.i("SYNC", "camera"+String.valueOf(index));
                                Toast.makeText(getApplicationContext(), String.valueOf(index), Toast.LENGTH_SHORT).show();
                            holder.clean.setBackgroundColor(Color.parseColor("#1C6614"));
                            holder.dirty.setBackgroundColor(Color.parseColor("#8A8787"));
                            holder.na.setBackgroundColor(Color.parseColor("#8A8787"));
                            holder.dc.setBackgroundColor(Color.parseColor("#8A8787"));
                            Status = "1";
                            index = (Integer)v.getTag();
                            Log.i("SYNC", String.valueOf(index));
                            String timeStamp = new SimpleDateFormat(
                                    "MM/dd/yyyy hh:mm:ss a").format(new Date());
                            db.updateInspectionDetails(inspection_id, user_id,
                                    location_inspection_array.get(position)
                                            .getComponentid(), subclient_id, client_id,
                                    Status, images_path_string, timeStamp);
                            return false;
                        }
                    });
                    holder.dirty.setOnClickListener(new OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            // TODO Auto-generated method stub
                            index = (Integer)v.getTag();
                            //  Log.i("SYNC", "camera"+String.valueOf(index));
                                Toast.makeText(getApplicationContext(), String.valueOf(index), Toast.LENGTH_SHORT).show();
                            holder.dirty.setBackgroundColor(Color.parseColor("#FC4E3B"));
                            holder.clean.setBackgroundColor(Color.parseColor("#8A8787"));
                            holder.na.setBackgroundColor(Color.parseColor("#8A8787"));
                            holder.dc.setBackgroundColor(Color.parseColor("#8A8787"));
                            Status = "3";
                            component_id_note = location_inspection_array.get(position)
                                    .getComponentid();
                            // db.updateInspectionDetails(inspection_id, user_id,
                            // location_inspection_array.get(position)
                            // .getComponentid(), subclient_id, client_id,
                            // Status, images_path_string, images_time_string);
                            intent = new Intent(getContext(), Notes.class);
                            intent.putExtra("client_id", client_id);
                            intent.putExtra("component_id_note", a);
                            intent.putExtra("inspection_id", inspection_id);
                            intent.putExtra("subClient_id", subclient_id);
                            intent.putExtra("sub_client_name", sub_client_name);
                            context.startActivityForResult(intent, 1);
                            context.overridePendingTransition(R.anim.slide_in,
                                    R.anim.slide_out);
                        }
                    });

                    holder.na.setOnTouchListener(new OnTouchListener() {
                        @Override
                        public boolean onTouch(View v, MotionEvent event) {
                            // TODO Auto-generated method stub
                            index = (Integer)v.getTag();
                            //  Log.i("SYNC", "camera"+String.valueOf(index));
                                Toast.makeText(getApplicationContext(), String.valueOf(index), Toast.LENGTH_SHORT).show();
                            holder.na.setBackgroundColor(Color.parseColor("#0D6CC3"));
                            holder.dirty.setBackgroundColor(Color.parseColor("#8A8787"));
                            holder.clean.setBackgroundColor(Color.parseColor("#8A8787"));
                            holder.dc.setBackgroundColor(Color.parseColor("#8A8787"));
                            Status = "4";
                            String timeStamp = new SimpleDateFormat(
                                    "MM/dd/yyyy hh:mm:ss a").format(new Date());
                            db.updateInspectionDetails(inspection_id, user_id,
                                    location_inspection_array.get(position)
                                            .getComponentid(), subclient_id, client_id,
                                    Status, images_path_string, timeStamp);
                            return false;
                        }
                    });
                    holder.dc.setOnClickListener(new OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            // TODO Auto-generated method stub
                            index = (Integer)v.getTag();
                            //  Log.i("SYNC", "camera"+String.valueOf(index));
                                Toast.makeText(getApplicationContext(), String.valueOf(index), Toast.LENGTH_SHORT).show();
                            holder.dc.setBackgroundColor(Color.parseColor("#E87403"));
                            holder.dirty.setBackgroundColor(Color.parseColor("#8A8787"));
                            holder.na.setBackgroundColor(Color.parseColor("#8A8787"));
                            holder.clean.setBackgroundColor(Color.parseColor("#8A8787"));
                            Status = "2";
                            component_id_note = location_inspection_array.get(position)
                                    .getComponentid();
                            intent = new Intent(getContext(), Notes.class);
                            intent.putExtra("client_id", client_id);
                            intent.putExtra("inspection_id", inspection_id);
                            intent.putExtra("component_id_note", a);
                            intent.putExtra("subClient_id", subclient_id);
                            intent.putExtra("sub_client_name", sub_client_name);
                            context.startActivityForResult(intent, 1);
                            context.overridePendingTransition(R.anim.slide_in,
                                    R.anim.slide_out);
                        }
                    });

                    holder.camra.setOnClickListener(new OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            // TODO Auto-generated method stub
                            index = (Integer)v.getTag();
                        //  Log.i("SYNC", "camera"+String.valueOf(index));
                            Toast.makeText(getApplicationContext(), String.valueOf(index), Toast.LENGTH_SHORT).show();

                            Camera(location_inspection_array.get(index).getClientid(),
                                    location_inspection_array.get(index)
                                            .getSubclientid(),
                                    location_inspection_array.get(index)
                                            .getComponentid(),
                                    location_inspection_array.get(index).getComp_name());
                        }
                    });
                    holder.notes.setOnClickListener(new OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            // TODO Auto-generated method stub
                            component_id_note = location_inspection_array.get(position)
                                    .getComponentid();
                            intent = new Intent(getContext(), Notes.class);
                            intent.putExtra("client_id", client_id);
                            intent.putExtra("component_id_note", a);
                            intent.putExtra("inspection_id", inspection_id);
                            intent.putExtra("subClient_id", subclient_id);
                            intent.putExtra("sub_client_name", sub_client_name);
                            context.startActivity(intent);
                            context.overridePendingTransition(R.anim.slide_in,
                                    R.anim.slide_out);
                        }
                    });

这并不正确,因为它总是首先更新颜色&最后一个视图。

我还打印了每个按钮的索引,我得到的最后一个项目的正确索引为0。请告诉我该如何改进。

在OnClick(View v)中,您可以将视图作为参数,并像一样更改其背景颜色

v.setBackgroundColor(Color.RED);

您可以尝试这样的操作:(仅当它们有相同的父级时)

holder.clean.setOnTouchListener(new OnTouchListener() {
                    @Override
                    public boolean onTouch(View v, MotionEvent event) {
                        // TODO Auto-generated method stub
                        index = (Integer)v.getTag();
                        //  Log.i("SYNC", "camera"+String.valueOf(index));
                            Toast.makeText(getApplicationContext(), String.valueOf(index), Toast.LENGTH_SHORT).show();
                        v.setBackgroundColor(Color.parseColor("#1C6614"));
                        v.getParent().findViewById(R.id.dirty_view_id).setBackgroundColor(Color.parseColor("#8A8787"));
                        v.getParent().findViewById(R.id.na_view_id).setBackgroundColor(Color.parseColor("#8A8787"));
                        v.getParent().findViewById(R.id.dc_view_id).setBackgroundColor(Color.parseColor("#8A8787"));
                        Status = "1";
                        index = (Integer)v.getTag();
                        Log.i("SYNC", String.valueOf(index));
                        String timeStamp = new SimpleDateFormat(
                                "MM/dd/yyyy hh:mm:ss a").format(new Date());
                        db.updateInspectionDetails(inspection_id, user_id,
                                location_inspection_array.get(position)
                                        .getComponentid(), subclient_id, client_id,
                                Status, images_path_string, timeStamp);
                        return false;
                    }
                });

对其他人也要这样做。

这样做:

if (location_obj.getInspectionstatus().equalsIgnoreCase("1")) {
 holder.clean.setBackgroundColor(Color.parseColor("#1C6614"));
} else{
 holder.clean.setBackgroundColor(Color.parseColor("Color_you_want_to_remian_with"));
}
if (location_obj.getInspectionstatus().equalsIgnoreCase("3")) {
 holder.dirty.setBackgroundColor(Color.parseColor("#FC4E3B"));
} else{
 holder.dirty.setBackgroundColor(Color.parseColor("Color_you_want_to_remian_with"));
}

getView()中对if条件的其余部分执行此操作,然后检查这些更改是否有效

最新更新