ArrayAdapter
行とその行のアイテムの数量を出力するを構築しようとしています。ただし、毎回余分な行が追加されるという望ましくない効果が得られます。
私の論理の何が問題なのかはわかりませんが、それは小さなことだと確信しています。以下は私のgetView()
方法です:
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if(v == null){
LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(R.layout.order_row, null);
}
item = dishes.get(position);
if(lastItem != null){
if(!lastItem.getName().equals(item.getName())){
dishName = (TextView)v.findViewById(R.id.dishName);
dishPrice = (TextView)v.findViewById(R.id.dishPrice);
dishName.setText(item.getName());
dishPrice.setText(String.valueOf(item.getPrice()));
dishQty = (TextView)v.findViewById(R.id.dishQty);
dishQty.setText(String.valueOf(item.getQty()));
}
}
else{
dishName = (TextView)v.findViewById(R.id.dishName);
dishPrice = (TextView)v.findViewById(R.id.dishPrice);
dishName.setText(item.getName());
dishPrice.setText(String.valueOf(item.getPrice()));
dishQty = (TextView)v.findViewById(R.id.dishQty);
dishQty.setText(String.valueOf(item.getQty()));
}
lastItem = item;
return v;
}
現在、私の出力は次のようになっています
Chicken QUANTITY
2.99 2
次に、新しいアイテムを追加すると、数量は期待どおりに増加しますが、別の行が追加されます。
DISH NAME QUANTITY
DISH PRICE 0
私が間違っていることについてのアイデアはありますか??
リスト内のすべてのアイテムは、次のMenuItem
ように数量を増やすタイプです。
public void incQty(){
qty++;
}
これは、MenuItem
アレイ アダプターgetView()
を使用して数量を増やしたものです。NumberPicker
public View getView(final int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater) getContext().getSystemService(
Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.menuitem_row, null);
v.setFocusable(true);
}
// assign values to view
final MenuItem item = this.menuItems.get(position);
TextView nameView = (TextView) v.findViewById(R.id.item_name);
final TextView priceView = (TextView) v.findViewById(R.id.item_price);
nameView.setText(item.getName() + " ");
priceView.setText("€" + String.valueOf(item.getPrice()));
// number picker
np = (NumberPicker) v.findViewById(R.id.numpick);
np.setMaxValue(20);
np.setMinValue(0);
np.setValue(0);
np.setFocusable(false);
// calculation occurs when values are changed...
np.setOnValueChangedListener(new OnValueChangeListener() {
public void onValueChange(NumberPicker picker, int oldVal,
int newVal) {
//Add to order - increment price
if (newVal > oldVal) {
total = (item.getPrice() * newVal) - item.getPrice()
* oldVal;
Order.getInstance().addToOrder(item);
item.incQty();
amount += total;
Order.getInstance().setAmount(amount);
Toast.makeText(picker.getContext(), "Item Added: " + item.getName() + " Size: " + Order.getInstance().getOrderItems().size(), Toast.LENGTH_SHORT).show();
confirmBtn.setVisibility(View.VISIBLE);
}
//remove from order - decrement price
if (newVal < oldVal) {
total = (item.getPrice() * oldVal) - item.getPrice()
* newVal;
Order.getInstance().removeFromOrder(position);
item.decQty();
amount -= total;
Order.getInstance().setAmount(amount);
Toast.makeText(picker.getContext(), "Item removed: " + item.getName() + " Size: " + Order.getInstance().getOrderItems().size(), Toast.LENGTH_SHORT).show();
if(Order.getInstance().getOrderItems().size() == 0){
confirmBtn.setVisibility(View.INVISIBLE);
}
}
//update the text view price.
price.setText("€" + String.valueOf(Order.getInstance().getAmount()));
}
});
return v;
}