我已经在Android中使用SimpleAdapter
实现了ListView
。我在SimpleAdapter
的getView
方法中设置了一些条件。
根据满足的条件,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
}