I implemented a custom ArrayAdapter to manage my data and show it in a ListView.
This is the code of my custom adapter:

```
private class ViewHolder{

    User user;
    CheckBox check;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    final ViewHolder holder=new ViewHolder();
    LayoutInflater inflater = (LayoutInflater) getContext()
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    User c = getItem(position);

    if(convertView==null)
        convertView=new userCheckableRow(getContext(),c.getChecked());
    CheckBox name = (CheckBox)convertView.findViewById(R.id.userCheckBox);

    name.setText(c.getName());
    holder.user=c;
    holder.check=name;
    name.setChecked(holder.user.getChecked());
    convertView.setTag(holder);
    name.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            ViewHolder holder=(ViewHolder)((View)v.getParent().getParent()).getTag();
            CheckBox ck=holder.check;
            User c=(User) holder.user;
            c.setChecked(ck.isChecked());

       }
    });
    return convertView;
}

```

In my activity the user fills some fields and check some checkboxes;
when he check them and then open/close keyboard to continue filling other fields, then the checkbox status is lost and these become all unchecked.

**What I tried (and didn't work):** 

* Set an OnFocusChangedListener to all EditText fields to intercept when they get focus;
* Set an OnKeyListener to all EditText fields to intercept KEYCODE\_BACK event;
* Implement onBackPressed();
* Implement a GlobalLayoutListener ([How to check visibility of software keyboard in Android?](https://stackoverflow.com/questions/2150078/how-to-check-visibility-of-software-keyboard-in-android)) to intercept when keyboard is open, but with this code my checkboxes where unclickable because of continuous refreshing list;
* Implement onConfigurationChanged() to listen to keyboardHides|screenResize , but this callback event can intercept only hard keyboard and however didn't work;

How can I manage this situation?