getview中的位置在适配器内的onCheckedChaneListener中发生了变化

时间:2017-11-14 14:37:34

标签: android listview radio-button

我已经使用CustomAdapter创建了一个Listview,每行都有单选按钮[单选] bt在设置适配器后产生错误

  if (arr_data.get(position).isdefaultCurrency())   holder.radio_currency.setChecked(true);
  } else {
        holder.radio_currency.setChecked(false);
    }
    holder.radio_currency.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked) {

                for (int k = 0; k < arr_data.size(); k++) {
                    if (k == position) {
                        arr_data.get(k).setIsdefaultCurrency(true);
                    } else {
                        arr_data.get(k).setIsdefaultCurrency(false);
                    }
                }
            } else {
                arr_data.get(position).setIsdefaultCurrency(false);
            }
            notifyDataSetChanged();
        }
    });

2 个答案:

答案 0 :(得分:0)

我认为你使这比必要的更复杂。您似乎有一个单选按钮列表,并且您想知道选择了哪一个。而不是使用boolean值列表,只需存储一个int与所选的位置。或者,存储更有意义的内容以表示默认货币,例如字符'$'

答案 1 :(得分:0)

我的问题只是通过使用OnClickListener而不是OnCheckedChangeListener来解决。

  holder.radio_currency.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            for (int k = 0; k < arr_data.size(); k++) {
                if (k == position) {
                    arr_data.get(k).setIsdefaultCurrency(true);
                } else {
                    arr_data.get(k).setIsdefaultCurrency(false);
                }
            }
            notifyDataSetChanged();
        }
    });