0

私のコードで list linearlayout を作成しました

String[] name = {"Chicken", "Beef", "Milk" ,"Juice"};
    final Integer[] price = {10, 50, 5, 3};
    final Integer[] qty = {1, 2, 5, 5};

    listOrder.removeAllViews();
    LinearLayout.LayoutParams image = new LinearLayout.LayoutParams(Utility.getDip(175, CartActivity.this), Utility.getDip(70, CartActivity.this));
    LinearLayout.LayoutParams text = new LinearLayout.LayoutParams(Utility.getDip(140, CartActivity.this), Utility.getDip(80, CartActivity.this));
    LinearLayout.LayoutParams textQty = new LinearLayout.LayoutParams(Utility.getDip(100, CartActivity.this), Utility.getDip(80, CartActivity.this));
    LinearLayout.LayoutParams textPrice = new LinearLayout.LayoutParams(Utility.getDip(125, CartActivity.this), Utility.getDip(80, CartActivity.this));
    LinearLayout.LayoutParams textTotal = new LinearLayout.LayoutParams(Utility.getDip(130, CartActivity.this), Utility.getDip(80, CartActivity.this));
    LinearLayout.LayoutParams editImage = new LinearLayout.LayoutParams(Utility.getDip(40, CartActivity.this), Utility.getDip(40, CartActivity.this));
    for(int i = 0; i < 4; i++){
        list = new LinearLayout(ctx);
        list.setOrientation(LinearLayout.HORIZONTAL);
        //if((i % 2) == 0) list.setBackgroundColor(R.color.bg_grey);

        listImage = new ImageView(ctx);
        //listImage.setImageDrawable(getResources().getDrawable(R.drawable.sample_logo_publisher));
        listImage.setBackgroundColor(getResources().getColor(R.color.bg_grey));
        listImage.setAdjustViewBounds(Boolean.TRUE);
        listImage.setScaleType(ScaleType.FIT_XY);

        image.gravity = Gravity.CENTER;
        image.setMargins(Utility.getDip(10, CartActivity.this), 0, Utility.getDip(10, CartActivity.this), 0);
        list.addView(listImage, image);

        listText = new TextView(ctx);
        listText.setText(name[i]);
        listText.setGravity(Gravity.CENTER);
        text.gravity = Gravity.CENTER;
        text.setMargins(Utility.getDip(10, CartActivity.this), 0, 0, 0);
        list.addView(listText, text);

        listQty = new TextView(ctx);
        listQty.setText(qty[i].toString());
        listQty.setGravity(Gravity.CENTER);
        textQty.gravity = Gravity.CENTER;
        textQty.setMargins(Utility.getDip(5, CartActivity.this), 0, Utility.getDip(5, CartActivity.this), 0);
        list.addView(listQty, textQty);

        listPrice = new TextView(ctx);
        listPrice.setText(price[i].toString());
        listPrice.setGravity(Gravity.CENTER_VERTICAL);
        textPrice.gravity = Gravity.CENTER;
        list.addView(listPrice, textPrice);

        Integer total = qty[i]*price[i];
        listTotal = new TextView(ctx);
        listTotal.setText(total.toString());
        listTotal.setGravity(Gravity.CENTER_VERTICAL);
        textTotal.gravity = Gravity.CENTER;
        textTotal.setMargins(Utility.getDip(5, CartActivity.this), 0, Utility.getDip(2, CartActivity.this), 0);
        list.addView(listTotal, textTotal);

        plus = new ImageView(ctx);
        plus.setImageDrawable(getResources().getDrawable(R.drawable.plus));
        plus.setAdjustViewBounds(Boolean.TRUE);
        plus.setScaleType(ScaleType.FIT_XY);
        editImage.gravity = Gravity.CENTER;
        list.addView(plus, editImage);
        final int pos = i;
        plus.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                qty[pos] = qty[pos] + 1;
                listQty.setText(qty[pos].toString());
                listTotal.setText(""+ (qty[pos]*price[pos]));
            }
        });

        minus = new ImageView(ctx);
        minus.setImageDrawable(getResources().getDrawable(R.drawable.min));
        minus.setAdjustViewBounds(Boolean.TRUE);
        minus.setScaleType(ScaleType.FIT_XY);
        editImage.gravity = Gravity.CENTER;
        list.addView(minus, editImage);

        remove = new ImageView(ctx);
        remove.setImageDrawable(getResources().getDrawable(R.drawable.trash));
        remove.setAdjustViewBounds(Boolean.TRUE);
        remove.setScaleType(ScaleType.FIT_XY);
        editImage.gravity = Gravity.CENTER;
        list.addView(remove, editImage);

        listOrder.addView(list);
    }

プラス画像をオンクリックしたときに数量を追加したい。しかし、リストのプラス画像をクリックすると、画像をクリックしたのと同じリストではなく、リストの最後で textQty が変更されました。

コードを修正するには?

4

2 に答える 2

0

TextViewsとボタンをリンクする必要があります。彼らは、forループの同じ反復にいることを知りません。

ループを通過するときに、ボタンとテキストビューの各セットを配列に配置できます。

次に、onClickListenerで、次のようなことを行います。

for(int i = 0; i < buttonArray.length; i++){
    if(v == buttonArray[i]){
       // make whatever changes to TextViews at index i
    }
}
于 2013-01-15T01:34:00.710 に答える
0

問題を解決しました。ここに私のコードがあります...
私はlistQtyとlistTotalにidを設定しました

listQty = new TextView(ctx);
listQty.setId(99000+i);
listQty.setText(qty[i].toString());
listQty.setGravity(Gravity.CENTER);
textQty.gravity = Gravity.CENTER;
textQty.setMargins(Utility.getDip(5, CartActivity.this), 0, Utility.getDip(5, CartActivity.this), 0);
list.addView(listQty, textQty);

listTotal = new TextView(ctx);
listTotal.setId(98000+i);
listTotal.setText(total.toString());
listTotal.setGravity(Gravity.CENTER_VERTICAL);
textTotal.gravity = Gravity.CENTER;
textTotal.setMargins(Utility.getDip(5, CartActivity.this), 0, Utility.getDip(2, CartActivity.this), 0);
list.addView(listTotal, textTotal);

clicklistener で、listQty と listTotal の変数を設定します。

plus = new ImageView(ctx);
plus.setImageDrawable(getResources().getDrawable(R.drawable.plus));
plus.setAdjustViewBounds(Boolean.TRUE);
plus.setScaleType(ScaleType.FIT_XY);
editImage.gravity = Gravity.CENTER;
list.addView(plus, editImage);
final int pos = i;
plus.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
    // TODO Auto-generated method stub
        listQty = (TextView)findViewById(99000+pos);
        listTotal = (TextView)findViewById(98000+pos);
        qty[pos] = qty[pos] + 1;
        listQty.setText(qty[pos].toString());
        listTotal.setText(""+ (qty[pos]*price[pos]));
    }
});
于 2013-01-16T07:46:16.503 に答える