1

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?) 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?

Community
  • 1
  • 1
Andrea Caruso
  • 53
  • 1
  • 9

2 Answers2

0

Read and try to understand this example: http://www.javacodegeeks.com/2013/09/android-viewholder-pattern-example.html

Also your ViewHolder class should be "static".

Oğuzhan Döngül
  • 7,856
  • 4
  • 38
  • 52
0

try this in your Activity tag inside Manifest file

android:windowSoftInputMode="stateAlwaysHidden|adjustPan"
abbasalim
  • 3,118
  • 2
  • 23
  • 45