1

我實現了一個自定義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,但是這個回調事件只能攔截硬鍵盤,但是不能工作;

我該如何處理這種情況?

回答

0

試試這個在您的活動代碼清單文件內

android:windowSoftInputMode="stateAlwaysHidden|adjustPan" 
相關問題