I have custom listview
    public class MisscallListAdapter extends ArrayAdapter<SmsClass>
This is viewHolder :
        private static class ViewHolder {
               TextView number , name , date , count , time;
               ImageButton btnCall , btnSendsms , btnDelete;
               ImageView imageIcon;
               CheckBox checkBox;
        }
In the getView method I try to get the item that clicked by user and put it in an ArrayList like this :
        public View getView(final int position, View convertView, ViewGroup parent) {
    ViewHolder viewHolder = null;
    final SmsClass smsClass = getItem(position);
    String nameInside = smsClass.getName();
    final String numInside = smsClass.getNumberInside();
    LayoutInflater mInflater = (LayoutInflater) context
            .getSystemService( Activity.LAYOUT_INFLATER_SERVICE);
    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.single_list, null);
        viewHolder = new ViewHolder();
        viewHolder.number = (TextView) convertView.findViewById(R.id.number);
        viewHolder.date =(TextView) convertView.findViewById(R.id.date);
        viewHolder.name = (TextView)convertView.findViewById(R.id.name);
        viewHolder.count = (TextView)convertView.findViewById(R.id.count);
        viewHolder.btnCall = (ImageButton) convertView.findViewById( R.id.btn_call );
        viewHolder.btnSendsms = (ImageButton)convertView.findViewById( R.id.btn_sms);
        viewHolder.imageIcon = (ImageView) convertView.findViewById(R.id.icon);
        viewHolder.checkBox = (CheckBox) convertView.findViewById( R.id.checkBox);
        convertView.setTag(viewHolder);
    } else
        viewHolder = (ViewHolder) convertView.getTag();
    viewHolder.name.setText( //text );
    viewHolder.date.setText( //text );
    viewHolder.number.setText( //text );
    viewHolder.count.setText( //text );
    viewHolder.btnSendsms.setOnClickListener( new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            try{
                TextView selected = (TextView) MainActivity.smsList.getChildAt(position).findViewById(R.id.name);
                clicked_number = selected.getText().toString();
                openSMS( numInside);
            }
            catch (Exception e){}
        }
    } );
    viewHolder.btnCall.setOnClickListener( new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            try{
                TextView selected = (TextView) MainActivity.smsList.getChildAt(position).findViewById(R.id.name);
                clicked_number = selected.getText().toString();
                dialContactPhone(numInside);
            }
            catch (Exception e){}
        }
    } );
    final ViewHolder finalViewHolder = viewHolder;
    final View finalConvertView = convertView;
    viewHolder.checkBox.setOnClickListener( new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (finalViewHolder.checkBox.isChecked()) {
                selected.add( smsClass );
            } else {
                for(int i = 0 ; i < selected.size() ; i++){
                    if(selected.get( i ).getId() == smsClass.getId())
                        selected.remove( i );
                }
            }
        }
    } );
    if(isEnd == true) {
        for (int i = 0; i < MainActivity.smsList.getCount(); i++) {
            Log.i( "ujkac" , "count:    " + i );
            viewHolder.checkBox.setChecked( false );
        }
    }
    return convertView;
}
The smsClass above is:
    final SmsClass smsClass = getItem(position);
The problem is when I select the first row of the list(just first item) and make it checked then the fifth item checked too and tenth item and ... help, please.
 
     
    