您好我创建了customlistview第一次添加了一个按钮我在0中插入值。当我必须单击时,数据库中的添加按钮值更改为1。获取列值结果。
注意* 获取值结果1表示更改按钮或颜色。我在baseadapter中使用 *
这里我也提到了示例代码:
holder.btn_add.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
HashMap<String, String> hashMap = new HashMap<String, String>();
hashMap.put("product", arrListproduct_name
.get(position).toString().trim());
hashMap.put(
"price",
getDoublePrecision(arrListproductprice
.get(position).toString().trim()));
hashMap.put("productID", arrlistproduct_id
.get(position).toString().trim());
hashMap.put("quantity", datavalue);
hashMap.put("resturantID",
category.dinein_restaurant_id);
hashMap.put("value", Str_value);
arrListproductdatabase.add(hashMap);
if (dataBase.ProductExist(
DatabaseHelper.TABLErestaurant,
arrlistproduct_id.get(position).toString()
.trim())) {
Toast.makeText(VegNonVegClass.this,
"Update successfully", Toast.LENGTH_LONG)
.show();
for (int i = 0; i < GetAllitemDetailsItem.size(); i++) {
dataBase.updateData1(
GetAllitemDetailsItem.get(i).get("id"),
DatabaseHelper.TABLErestaurant, "1");
}
} else {
dataBase.insertData(DatabaseHelper.TABLErestaurant,
arrListproductdatabase);
arrListproductdatabase.clear();
Toast.makeText(VegNonVegClass.this,
"Add successfully", Toast.LENGTH_LONG)
.show();
// arrListproductdatabase.remove(position);
// notifyDataSetChanged();
ArrayList<String> selectedno = dataBase
.getselectedTrue();
for (String s : selectedno) {
if (s.equalsIgnoreCase("1")) {
holder.btn_add
.setBackgroundResource(R.drawable.checkout);
}
}
}
if (listener != null) {
listener.totalAmount(String.valueOf(Str_subtotal));
}
}
});
问题按钮已更改但列表视图刷新表示自动更改了上一个按钮请给我解决方案
答案 0 :(得分:0)
我不完全确定我理解你的问题,但我相信你说按钮的价值正在改变,但它在列表中的观点没有改变,是否正确?
如果是这样,那是因为列表视图的适配器的工作原理。通过重新使用已创建的膨胀视图,而不是每次都重新创建它们,它的设计效率很高。
首先,尝试在适配器上调用notifyDataSetChanged()。
如果这不能更新您的问题,可能是因为您实际上并没有更改适配器中的数据;只是它代表的价值。
确保您也适当地覆盖了适配器的getView()方法:
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
if(row == null)
{
row = (((Activity)mContext).getLayoutInflater()).inflate(layoutResourceId, parent, false);
}
try{
// Set what the view should show here
}
catch(Exception e){
e.printStackTrace();
}
return row;
}