我實現了一個自定義ArrayAdapter來管理我的數據並在ListView中顯示它。 這是我的自定義接口的代碼:Android - 當用戶打開/隱藏軟鍵盤時,ListView中的複選框會丟失狀態
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;
}
在我的活動用戶填寫一些字段,並檢查了一些複選框; 當他檢查他們,然後打開/關閉鍵盤繼續填寫其他領域,然後複選框狀態丟失,這些都變成不選中。
我想什麼(沒有工作):
設置一個OnFocusChangedListener所有的EditText字段時獲得焦點攔截;
將OnKeyListener設置爲所有EditText字段以攔截KEYCODE_BACK事件;
Implement onBackPressed();
當鍵盤打開時,實現一個GlobalLayoutListener(How to check visibility of software keyboard in Android?)攔截,但是使用此代碼,我的複選框由於連續刷新列表而無法點擊;
實現onConfigurationChanged()來監聽keyboardHides | screenResize,但是這個回調事件只能攔截硬鍵盤,但是不能工作;
我該如何處理這種情況?