2015-09-22 3 views
1

в моем приложении Android. Я показываю список контактов телефона в виде списка и флажок в каждой строке для выбора контактов. Но когда я выбираю конкретную строку вокруг десятой строки, она также выбирается автоматически. Я даю мой код ниже, если один знает, пожалуйста, помогите ..Android Checkbox в Listview автоматически выбирается

public class ContactsAdapter extends BaseAdapter 
{ 
    private Context context; 
    private ArrayList<Contact> contacts; 


    public ContactsAdapter(Context context, ArrayList<Contact> contacts) 
    { 
     this.context = context; 
     this.contacts = contacts; 
    } 

    public View getView(final int position, View convertView, ViewGroup parent) { 

     LayoutInflater inflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     View gridView; 
     final ViewHolder mHolder; 
     if (convertView == null) 
     { 

      // gridView = new View(context); 
      // get layout from mobile.xml 
      //gridView = inflater.inflate(R.layout.contact, null); 
      convertView = inflater.inflate(R.layout.contact, null); 
      mHolder = new ViewHolder(); 

      mHolder.textName  =(TextView) convertView.findViewById(R.id.name); 
      mHolder.textMobile =(TextView) convertView.findViewById(R.id.mobile); 
      mHolder.textSelector =(CheckBox) convertView.findViewById(R.id.selected); 

      convertView.setTag(mHolder); 


)); 
      } 



     else 
     { 


      mHolder = (ViewHolder) convertView.getTag(); 
      mHolder.textSelector.setOnCheckedChangeListener(null); 
     } 

     mHolder.textMobile.setText(contacts.get(position).getMobile()); 
     mHolder.textName.setText(contacts.get(position).getName()); 
     mHolder.textSelector.setFocusable(false); 


     return convertView; 
    } 




    private class ViewHolder { 
     private TextView textMobile,textName; 
     private CheckBox textSelector; 


    } 

    @Override 
    public int getCount() { 
     return contacts.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return null; 
    } 

    @Override 
    public long getItemId(int position) { 
     return 0; 
    } 

} 
+0

проверить это http://stackoverflow.com/questions/18162931/get-selected-item-using-checkbox-in-listview, если оно помогает – Raghunandan

ответ

1

@ Jocheved ... редактировать код, как это ...

public class ContactsAdapter extends BaseAdapter 
{ 
    private Context context; 
    private ArrayList<Contact> contacts; 
    SparseBooleanArray sba=new SparseBooleanArray(); 

    public ContactsAdapter(Context context, ArrayList<Contact> contacts) 
    { 
     this.context = context; 
     this.contacts = contacts; 
    } 

    public View getView(final int position, View convertView, ViewGroup parent) { 

     LayoutInflater inflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     final ViewHolder mHolder; 

     if (convertView == null) 
     { 
      convertView = inflater.inflate(R.layout.contact, null); 
      mHolder = new ViewHolder(); 

      mHolder.textName  =(TextView) convertView.findViewById(R.id.name); 
      mHolder.textMobile =(TextView) convertView.findViewById(R.id.mobile); 
      mHolder.textSelector =(CheckBox) convertView.findViewById(R.id.selected); 

      convertView.setTag(mHolder); 

      } 
     else 
     { 
      mHolder = (ViewHolder) convertView.getTag(); 
     } 

     mHolder.textMobile.setText(contacts.get(position).getMobile()); 
     mHolder.textName.setText(contacts.get(position).getName()); 
     mHolder.textName.setSelected(true); 
     mHolder.textSelector.setChecked(sba.get(position)); 

     mHolder.textSelector.setOnClickListener(new View.OnClickListener() 
     { 
      @Override 
      public void onClick(View v) { 

       if(mHolder.textSelector.isChecked()) 
       { 
        sba.put(position, true); 
       } 

       else 
       { 
        sba.put(position, false); 
       } 

      } 
     }); 

     return convertView; 
    } 

    private class ViewHolder 
{ 
     private TextView textMobile,textName; 
     private CheckBox textSelector; 


    } 

    @Override 
    public int getCount() { 
     return contacts.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return null; 
    } 

    @Override 
    public long getItemId(int position) { 
     return 0; 
    } 

} 
+0

Спасибо Рошан ... это работает ... – Jocheved

2

Ну Это потому, что ViewHolder будет перерабатывают Просмотров каждый раз Прокрутка я предлагаю вам использовать OnClick на ListItem вместо CheckBox

Чтобы преодолеть это Объявите SparseBooleanArray

SparseBooleanArray sba=new SparseBooleanArray();//this should be global 

Затем установите пункты проверены ул ели как только вы сделать его

mHolder.textSelector =(CheckBox) convertView.findViewById(R.id.selected); 
mHolder.textSelector.setChecked(sba.get(position)); 

Затем написать onClickListener к вам convertView и проверить его вручную

convertView.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
      @Override 
      public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) { 
      mHolder.textSelector.setChecked(isChecked); 
      sba.put(position,isChecked); //storing the state 
      } 
     } 

); 

    **Well Now the sba has list items checked and you can use that for further Actions** 
+0

Спасибо Rajan .. L et me проверка .. – Jocheved

+0

- это то, что работает? –

+0

Я получаю сообщение об ошибке «Тип массива ожидаемый найденный andoid.util.sparseboolean array, – Jocheved