CheckBoxes в Android - PullRequest
       6

CheckBoxes в Android

0 голосов
/ 10 октября 2011

Привет, я использую чекбоксы со списком в Android, когда прокручиваю элемент списка. Я не получаю те же чекбоксы, чтобы проверить, что ожидается, помогите мне разобраться, где я ошибаюсь. когда я выбираю первый флажок и прокручиваю его, дайте мне второй флажок, как проверено, и другой вывод тоже странный. Вот мой код

class base extends BaseAdapter{

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return price.size();
        }

        @Override
        public Object getItem(int arg0) {
            // TODO Auto-generated method stub
            return arg0;
        }

        @Override
        public long getItemId(int arg0) {
            // TODO Auto-generated method stub
            return arg0;
        }

        @Override
        public View getView(int arg0, View arg1, ViewGroup arg2) {
            // TODO Auto-generated method stub
            View v=arg1;
j=arg0;
            LayoutInflater li=getLayoutInflater();
            v=li.inflate(R.layout.listitem, null);
            TextView txt=(TextView)v.findViewById(R.id.tv_name);
            txt.setText(author.get(arg0));
            TextView txt1=(TextView)v.findViewById(R.id.tv_description);
            txt1.setText(price.get(arg0));
            TextView txt2=(TextView)v.findViewById(R.id.txtv);
        txt2.setText(title.get(arg0));
        ImageView img=(ImageView)v.findViewById(R.id.iv_forward);


        img.setImageBitmap(bit.get(arg0));
        CheckBox check1=(CheckBox)v.findViewById(R.id.check);
        if(check[j]!=null)
            if(check[j]==true)
            check1.setChecked(true);
            else check1.setChecked(false);

        check1.setOnCheckedChangeListener(new OnCheckedChangeListener(){

            @Override
            public void onCheckedChanged(CompoundButton arg0, boolean arg2) {
                // TODO Auto-generated method stub
                if(arg2==true)
                //  Toast.makeText(SimpleActivity.this,arg0+"", Toast.LENGTH_LONG).show();
                check[j]= true;
                else 
                    check[j]=false;
            }

        });

            return v;


    }
        }

пожалуйста, помогите.

Ответы [ 3 ]

1 голос
/ 10 октября 2011

Поскольку вы каждый раз перерабатываете свои представления, флажок будет иметь то же значение, что и предыдущий вид списка. Что бы я сделал, это установил флажок на FIRST в ложь для каждой итерации, а затем выяснил, следует ли проверять:

check1.setChecked(false);
if(check[j]!=null && check[j]==true){
        check1.setChecked(true);
}
0 голосов
/ 14 октября 2011

У меня была похожая проблема с ListView с CheckBox. Здесь вы можете найти полное решение этой проблемы.

0 голосов
/ 10 октября 2011

Я думаю, что это, вероятно, потому что метод Adapter getView() вызывает onCheckedChanged() (только если повторно используемые представления имеют противоположное значение).Это приводит к странному поведению.

public View getView(int arg0, View arg1, ViewGroup arg2) {
  if(check[j]==true) check1.setChecked(true); // will automatically call onCheckedChanged 
  else check1.setChecked(false);              // if check1 was previously the opposite

}

Возможно, вам следует отменить checkListener перед изменением значений так:

public View getView(int arg0, View arg1, ViewGroup arg2) {

  check1.setOnCheckedChangeListener(null); // first remove listener

  //update values
  if(check[j]==true) check1.setChecked(true); //no more side effect
  else check1.setChecked(false);

  //reinstall listener
  check1.setOnCheckedChangeListener(new OnCheckedChangeListener(){
     //your code.
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...