0

私はすべてを試しましたが、何もうまくいきませんでした。次のような listView があります。

   [ checkbox ] | [textview] | [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;
    }

このコードでは、ボタンのテキストはまったく変更されません。どのボタンをクリックしても、テキストは「1」のままです。

行なし:

b[i].setText(String.valueOf(1));

チェックされた行のボタンは、テキストが好きなように変更されています。しかし、チェックされていない行のボタンをクリックすると、クリックされたボタンのテキストが変更されます。

たぶん、私は愚かなことをしているのか、アルゴリズムに何かが欠けているだけなのか、現時点では立ち往生しています。

助けてください。ありがとう。

4

2 に答える 2

0

混乱しているように聞こえますが、表示getView()されるアイテムごとに 1 回実行されます。これはあなたのコードです:

        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のすべてのインスタンスは、レンダリングされている行b[i]のまったく同じ Button( R.id.qnt)を参照します。

vhまた、残りのビューを更新するときに、if/else の後にボタンのテキストを更新する必要があります。

于 2013-05-13T04:19:20.680 に答える