0

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;

}
4

1 に答える 1

0

アダプタのgetCount()メソッドを確認する必要があります。getCount()メソッドは、getView()メソッドから作成される行数を決定するメソッドです。

たとえば、getCount()が5を返す場合、リストビューに5行が表示されます。したがって、getCount()をチェックして、正しい行数を返すようにオーバーライドすることができます。

于 2013-03-16T14:04:58.450 に答える