滚动ListView会为所有不满足SimpleAdapter的getview方法中条件的按钮设置颜色



我已经在Android中使用SimpleAdapter实现了ListView。我在SimpleAdaptergetView方法中设置了一些条件。

根据满足的条件,ListView每行中的Buttons将变为红色、绿色、黄色或橙色。

我遇到的问题是,当我连续上下滚动ListView时,我可以看到一些不满足条件的按钮也在改变颜色,最后所有按钮都有上面提到的颜色。

有人能告诉我哪里出了问题吗。我的代码如下:

     BaseAdapter waiter_adapter = new SimpleAdapter(
                    getApplicationContext(), list_details_from_db,
                    R.layout.waiter_screen_details/* waiter_order_details */,
                    new String[] { "table_no", "order_id" }, new int[] {
                            R.id.tv_table_no, R.id.order_id }) {
                @Override
                public View getView(final int position, View convertView,
                        ViewGroup parent) {
                    // TODO Auto-generated method stub
                    /*final*/ View v = super.getView(position, convertView,
                            parent);
                    // Log.i("key values sub id in get view ",
                    // ""+key_names);
                    final TextView order_id = (TextView) v
                            .findViewById(R.id.order_id);
                    Log.i("Order id check from getview ", order_id
                            .getText().toString());
                    Button bt_waiter_id = (Button) v
                            .findViewById(R.id.bt_waiter_id);
                    Button placed_id = (Button) v
                            .findViewById(R.id.placed_id);
                    Button confirmed = (Button) v
                            .findViewById(R.id.confirmed);
                    Button prepared = (Button) v
                            .findViewById(R.id.prepared);
                    prepared.setOnClickListener(new OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            // TODO Auto-generated method stub
                            String o_id = order_id.getText().toString();
                            Intent prep_list = new Intent(
                                    Waiter_Order_List_ctivity.this,
                                    Prep_List_activity.class);
                            prep_list.putExtra("Order_Id", o_id
                            /* order_id_to_intent */);
                            Log.i("Order id sent to Prep list", o_id /* order_id_to_intent */);
                            startActivity(prep_list);
                        }
                    });
                    confirmed.setOnClickListener(new OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            // TODO Auto-generated method stub
                        }
                    });
                    final String order_id_str = order_id.getText()
                            .toString();
                    ArrayList<HashMap<String, String>> data = db
                            .get_order_course_list(order_id_str);
                    ArrayList<HashMap<String, String>> c = db
                            .get_item_status(order_id_str);
                    // if(item_status_from_db.get(index))
                    Log.i("item status retrievd from db", "" + c);
                    Log.i("database retrieved values from order course list",
                            "" + data);
                    Log.i("data size", "" + data.size());
                    try {
                        placed_id.setText(data.get(0).get("ist"));
                        confirmed.setText(data.get(0).get("confirm_ist"));
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    try {
                        count = 0;
                        count_confirmed = 0;
                        count_processed = 0;
                        if (list_details_from_db.get(position)
                                .get("status")
                                .compareToIgnoreCase("Initial") == 0) {
                            bt_waiter_id.setBackground(getResources()
                                    .getDrawable(
                                            R.drawable.waitr_ordr_red_btn));
                            bt_waiter_id.setText("Waiter Id:"
                                    + "n"
                                    + list_details_from_db.get(position)
                                            .get("initial_status"));
                        } else {
                            for (int i = 0; i < data.size(); i++) {
                                String status_str = data.get(i).get(
                                        "status1");
                                if (status_str
                                        .compareToIgnoreCase("Placed") == 0) {
                                    count++;
                                }
                                if (status_str
                                        .compareToIgnoreCase("Confirmed") == 0) {
                                    count_confirmed++;
                                }
                                if (status_str
                                        .compareToIgnoreCase("Processed") == 0) {
                                    count_processed++;
                                }
                            }
                        }
                        if (count > 0) {
                            placed_id
                                    .setBackground(getResources()
                                            .getDrawable(
                                                    R.drawable.waitr_ordr_yellow_btn));
                        }
                        if (count_confirmed > 0) {
                            confirmed
                                    .setBackground(getResources()
                                            .getDrawable(
                                                    R.drawable.waitr_ordr_orange_btn));
                            /*
                             * confirmed
                             * .setOnClickListener(Waiter_Order_List_ctivity
                             * .this);
                             */
                        }
                        if (count_processed > 0) {
                            prepared.setBackground(getResources()
                                    .getDrawable(
                                            R.drawable.waitr_ordr_green_btn));
                            /*
                             * prepared.setOnClickListener(
                             * Waiter_Order_List_ctivity.this);
                             */
                        }
                        if (c.size() > 0) {
                            prepared.setBackground(getResources()
                                    .getDrawable(
                                            R.drawable.waitr_ordr_green_btn));
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    placed_id
                            .setOnClickListener(new View.OnClickListener() {
                                @Override
                                public void onClick(View v) {
                                    // TODO Auto-generated method stub
                                    Intent intTableItm = new Intent(
                                            Waiter_Order_List_ctivity.this,
                                            Waiter_Confirm.class);
                                    intTableItm.putExtra("Order_Id",
                                            order_id_str);
                                    startActivity(intTableItm);
                                }
                            });
                    return v;
                }
            };
            w_order_list.setAdapter(waiter_adapter);

这取决于Listitems的重用。如果您在If条件下更改背景:

 if (list_details_from_db.get(position)

您必须将其设置为else条件下的默认背景。

//编辑

 @Override
            public View getView(final int position, View convertView,
                    ViewGroup parent) {
                // TODO Auto-generated method stub
                /*final*/ View v = super.getView(position, convertView,
                        parent);
                // Log.i("key values sub id in get view ",
                // ""+key_names);
                final TextView order_id = (TextView) v
                        .findViewById(R.id.order_id);
                Log.i("Order id check from getview ", order_id
                        .getText().toString());
                Button bt_waiter_id = (Button) v
                        .findViewById(R.id.bt_waiter_id);
                Button placed_id = (Button) v
                        .findViewById(R.id.placed_id);
                Button confirmed = (Button) v
                        .findViewById(R.id.confirmed);
                Button prepared = (Button) v
                        .findViewById(R.id.prepared);

                placed_id.setText("Your standard value");
                confirmed.setText("Your standard value");
                placed_id.setBackground(getResources()
                                        .getDrawable(
                                                R.drawable.your_standard_drawable));
                confirmed.setBackground(getResources()
                                        .getDrawable(
                                                R.drawable.your_standard_drawable));
                prepared.setBackground(getResources()
                                .getDrawable(
                                        R.drawable.your_standard_drawable));
                bt_waiter_id.setBackground(getResources()
                                .getDrawable(
                                        R.drawable.your_standard_drawable));
                bt_waiter_id.setText("your standard value");
                //
                //[...] Rest of your code
            }

最新更新