Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.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
Java Android-更改选定行中按钮的文本_Java_Android_Algorithm_Android Listview_Android Button - Fatal编程技术网

Java Android-更改选定行中按钮的文本

Java Android-更改选定行中按钮的文本,java,android,algorithm,android-listview,android-button,Java,Android,Algorithm,Android Listview,Android Button,我什么都试过了,但都没用。 我有这样一个列表视图: [ checkbox ] | [textview] | [button] 我想做的是只在选中[checkbox]的行中更改[button]的文本。 下面是有问题的代码块: public View getView(int position, View convertView, ViewGroup parent){ final ViewHolder vh; final View conv;

我什么都试过了,但都没用。 我有这样一个列表视图:

   [ checkbox ] | [textview] | [button]
我想做的是只在选中[checkbox]的行中更改[button]的文本。 下面是有问题的代码块:

public View getView(int position, View convertView, ViewGroup parent){
        final ViewHolder vh;
        final View conv;

        if(convertView == null){
            LayoutInflater vi=(LayoutInflater)pContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView=vi.inflate(R.layout.rest_dishes_item, null);
            conv=convertView;
            final Button b[];
            b=new Button[itens.size()];
            vh=new ViewHolder();
            vh.txt=(TextView)convertView.findViewById(R.id.dish_name);
            vh.checkBox=(CheckBox) convertView.findViewById(R.id.dish_item);
            vh.qnt=(Button) convertView.findViewById(R.id.qnt);

            vh.quantidade=new Quantidade[itens.size()];
            for(int i=0;i<itens.size();i++){
                b[i]=(Button)conv.findViewById(R.id.qnt);
                vh.quantidade[i].quantidade=1;
                vh.quantidade[i].order=i;
            }
            vh.qnt.setOnClickListener(new OnClickListener(){

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    for(int i=0;i<itens.size();i++){
                        Titem item=itens.get(i);
                        if(item.isCheck()){
                            vh.quantidade[i].quantidade++;
                            //Log.d("teste",i+""+vh.quantidade[i].quantidade);
                            b[i].setText(String.valueOf(vh.quantidade[i].quantidade));
                        }
                        else if(!item.isCheck()){
                            Log.d("teste",i+"1");
                            b[i].setText(String.valueOf(1));
                        }
                    }

                }

            });
                    //(Button) convertView.findViewById(R.id.qnt);



            convertView.setTag(vh);


            vh.checkBox.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View arg0) {
                    // TODO Auto-generated method stub
                    CheckBox box=(CheckBox) arg0;
                    Titem item=(Titem)box.getTag();

                    item.setCheck(box.isChecked());
                }
            });
        }else{
            vh=(ViewHolder)convertView.getTag();
        }

        Titem item=itemList.get(position);



        vh.txt.setText(item.getName());
        vh.checkBox.setText(item.getName());
        vh.checkBox.setChecked(item.isCheck());
        vh.checkBox.setTag(item);

        //Log.d("teste","chegou aqui");

        return convertView;
    }
选中行的按钮按我的要求更改了文本。但是,当我单击未选中行的按钮时,单击的按钮已更改文本

也许我正在做一些愚蠢的事情,或者只是在算法中遗漏了一些东西,现在我被卡住了

请帮忙。
谢谢。

听起来您有点困惑,
getView()
对每个可见项执行一次。这是您的代码:

        vh.qnt=(Button) convertView.findViewById(R.id.qnt);

        vh.quantidade=new Quantidade[itens.size()];
        for(int i=0;i<itens.size();i++){
            b[i]=(Button)conv.findViewById(R.id.qnt);
            vh.quantidade[i].quantidade=1;
            vh.quantidade[i].order=i;
        }
vh.qnt=(按钮)convertView.findViewById(R.id.qnt);
vh.quantidade=新的quantidade[itens.size()];
因为(inti=0;i我做到了!!
我使用了setTag()和getTag(),它们允许我对不同的按钮使用相同的id(R.id.qnt)

int aux=0; //before onCreate()
。 .


感谢@dmon的提示,您让我看到了“相同id”的事实。

为什么要使用按钮数组?所以我需要在xml文件中创建多个按钮?
int aux=0; //before onCreate()
vh.qnt.setTag(aux);//set a tag for each button in row
aux++;             //this will be the number of rows
vh.qnt.setOnClickListener(new OnClickListener(){

                @Override
                public void onClick(View arg0) {

                    int index=(Integer)vh.qnt.getTag();
                    Titem item=itens.get(index);
                    if(item.isCheck()){
                        vh.qnt.setText(String.valueOf(vh.quantidade[index]++));

                    }
                }

            });