Из вашего последнего комментария я думаю, что вижу, что вы пытаетесь сделать.Во-первых, я бы создал небольшой класс, содержащий информацию о ваших элементах, чтобы было немного легче работать (я только реализовал необходимые сеттеры, вам, вероятно, понадобятся также некоторые геттеры (и другие функции)):
public class MyItem
{
String description;
float price;
int quantity;
public void setDescription(String description)
{
this.description = description;
}
public void setPrice(float price)
{
this.price = price;
}
public void setQuantity(int quantity)
{
this.quantity = quantity;
}
public void increaseQuantity()
{
this.quantity++;
}
@Override
public int hashCode()
{
final int prime = 31;
int result = 1;
result = prime * result + ((description == null) ? 0 : description.hashCode());
return result;
}
@Override
public boolean equals(Object obj)
{
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
MyItem other = (MyItem) obj;
if (description == null)
{
if (other.description != null)
return false;
}
else if (!description.equals(other.description))
return false;
return true;
}
}
Я реализовал метод equals
(и тогда также обычно реализуется метод hash
), чтобы можно было легко проверить, существует ли элемент в списке (для простоты яПредположим, что description
однозначно идентифицирует элемент, вы должны изменить его при необходимости).Затем вы можете продолжить обработку следующим образом:
public void queryForItem(String itemCode)
{
Cursor cursor = db.rawQuery("SELECT code,desc,price FROM TbLPrice WHERE code =" + itemCode, null);
if (cursor.moveToFirst())
{
processCursor(cursor);
}
cursor.close();
}
private void processCursor(Cursor c)
{
MyItem newItem = new MyItem();
newItem.setDescription(c.getString(1));
newItem.setPrice(c.getFloat(2));
newItem.setQuantity(1);
// assuming that items (ArrayList<MyItem>) is defined and initialized earlier in the code
int existingItemIndex = items.indexOf(newItem);
if (existingItemIndex >= 0)
{
items.get(existingItemIndex).increaseQuantity();
}
else
{
items.add(newItem);
}
adapter.notifyDataSetChanged();
}
Я не проверял это никоим образом, но, думаю, он должен делать то, что вы хотите.Надеюсь, вы сможете увидеть логику в этом :)