Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android SetOnClickListener更改列表Linearlayout中的视图_Android_List_View_Android Linearlayout_Onclicklistener - Fatal编程技术网

Android SetOnClickListener更改列表Linearlayout中的视图

Android SetOnClickListener更改列表Linearlayout中的视图,android,list,view,android-linearlayout,onclicklistener,Android,List,View,Android Linearlayout,Onclicklistener,我已经用我的代码创建了列表线性布局 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.Layout

我已经用我的代码创建了列表线性布局

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);
    }
String[]name={“鸡肉”、“牛肉”、“牛奶”、“果汁”};
最终整数[]价格={10,50,5,3};
最终整数[]数量={1,2,5,5};
removeallview();
LinearLayout.LayoutParams image=新的LinearLayout.LayoutParams(Utility.getDip(175,CartActivity.this),Utility.getDip(70,CartActivity.this));
LinearLayout.LayoutParams text=新的LinearLayout.LayoutParams(Utility.getDip(140,CartActivity.this),Utility.getDip(80,CartActivity.this));
LinearLayout.LayoutParams textQty=新的LinearLayout.LayoutParams(Utility.getDip(100,CartActivity.this),Utility.getDip(80,CartActivity.this));
LinearLayout.LayoutParams textPrice=新的LinearLayout.LayoutParams(Utility.getDip(125,CartActivity.this),Utility.getDip(80,CartActivity.this));
LinearLayout.LayoutParams textTotal=新的LinearLayout.LayoutParams(Utility.getDip(130,CartActivity.this),Utility.getDip(80,CartActivity.this));
LinearLayout.LayoutParams editImage=新的LinearLayout.LayoutParams(Utility.getDip(40,CartActivity.this),Utility.getDip(40,CartActivity.this));
对于(int i=0;i<4;i++){
列表=新的线性布局(ctx);
列表.设置方向(线性布局.水平);
//if((i%2)=0)list.setBackgroundColor(R.color.bg_灰);
listImage=新图像视图(ctx);
//setImageDrawable(getResources().getDrawable(R.drawable.sample_logo_publisher));
setBackgroundColor(getResources().getColor(R.color.bg_grey));
setAdjustViewBounds(Boolean.TRUE);
listImage.setScaleType(ScaleType.FIT_XY);
image.gravity=gravity.CENTER;
setMargins(Utility.getDip(10,CartActivity.this),0,Utility.getDip(10,CartActivity.this),0);
list.addView(listImage,image);
listText=新文本视图(ctx);
setText(名称[i]);
listText.setGravity(Gravity.CENTER);
text.gravity=gravity.CENTER;
setMargins(Utility.getDip(10,CartActivity.this),0,0,0);
list.addView(listText,text);
listQty=新文本视图(ctx);
listQty.setText(数量[i].toString());
列表数量设置重力(重心);
text数量重心=重心重心;
textQty.setMargins(Utility.getDip(5,CartActivity.this),0,Utility.getDip(5,CartActivity.this),0);
list.addView(listQty,textQty);
listPrice=新文本视图(ctx);
listPrice.setText(price[i].toString());
listPrice.setGravity(重力、垂直中心);
text price.gravity=gravity.CENTER;
list.addView(listPrice,textPrice);
整数合计=数量[i]*价格[i];
listTotal=新文本视图(ctx);
listTotal.setText(total.toString());
listTotal.setGravity(重力、垂直中心);
text total.gravity=gravity.CENTER;
textTotal.setMargins(Utility.getDip(5,CartActivity.this),0,Utility.getDip(2,CartActivity.this),0);
list.addView(listTotal、textTotal);
plus=新图像视图(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);
最终int pos=i;
plus.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
数量【位置】=数量【位置】+1;
listQty.setText(数量[pos].toString());
listTotal.setText(“+(数量[pos]*价格[pos]);
}
});
减=新图像视图(ctx);
减.setImageDrawable(getResources().getDrawable(R.drawable.min));
减.setAdjustViewBounds(Boolean.TRUE);
减.setScaleType(ScaleType.FIT_XY);
editImage.gravity=gravity.CENTER;
list.addView(减号,editImage);
移除=新图像视图(ctx);
remove.setImageDrawable(getResources().getDrawable(R.drawable.trash));
remove.setAdjustViewBounds(Boolean.TRUE);
移除.setScaleType(ScaleType.FIT_XY);
editImage.gravity=gravity.CENTER;
list.addView(删除,编辑图像);
listOrder.addView(列表);
}
我想在单击plus图像时添加数量。但当我单击列表中的plus image时,textQty在列表末尾发生了更改,而不是在我单击图像的同一列表中


如何修复我的代码?

您需要将文本视图和按钮链接在一起。他们不知道自己处于for循环的同一个迭代中

当您遍历循环时,可以将每组按钮和文本视图放入一个数组中

然后,在OnClick Listener中,您可以执行以下操作:

for(int i = 0; i < buttonArray.length; i++){
    if(v == buttonArray[i]){
       // make whatever changes to TextViews at index i
    }
}
for(int i=0;i
我已经解决了我的问题。这是我的密码
我在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);
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]));
    }
});
在clicklistener中设置listQty和listTotal变量

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);
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]));
    }
});

我会开始将您的逻辑与布局分离。谢谢,但我已经用自己的代码解决了我的问题。