2013-10-16 35 views
0

我想開發一個應用程序,它在旋轉時保留其TextView和EditText中的值。我還想在未選擇EditText時隱藏軟鍵盤。但是,由於某種原因,當results可見時,hideKeyboard()方法在多次旋轉後崩潰。Android - 隱藏多次旋轉的軟鍵盤崩潰的方法

下面是我的一些方法,可能是罪魁禍首:

/** 
* Detects if text boxes are not selected to hide keyboard 
* @param view - main view 
*/ 
private void setupUI(View view) { 
    if(!(view instanceof EditText)) { 
     view.setOnTouchListener(new OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       hideKeyboard(); 
       return false; 
      } 
     }); 
    } 
    if (view instanceof ViewGroup) { 
     for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) { 
      View innerView = ((ViewGroup) view).getChildAt(i); 
      setupUI(innerView); 
     } 
    } 
} 

/** 
* Hides software keyboard 
*/ 
private void hideKeyboard() { 
     InputMethodManager inputMethodManager = (InputMethodManager) this.getSystemService(Activity.INPUT_METHOD_SERVICE); 
     inputMethodManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), 0);    
} 

/** 
* Saves instance state on rotation 
* @param outState - current state before rotation 
*/ 
@Override 
protected void onSaveInstanceState(Bundle outState) { 
    outState.putString("loabox", loaBox.getText().toString()); 
    outState.putString("lwlbox", lwlBox.getText().toString()); 
    outState.putString("beambox", beamBox.getText().toString()); 
    outState.putString("displacementbox", displacementBox.getText().toString()); 
    outState.putString("sabox", saBox.getText().toString()); 

    if (results != null && !isEmpty(mhsText) && !isEmpty(dlText) && !isEmpty(sadText) && !isEmpty(capsizeText) && !isEmpty(comfortText)) { 

     outState.putInt("results", results.getVisibility()); 

     outState.putString("mhs", mhsText.getText().toString()); 
     outState.putString("dl", dlText.getText().toString()); 
     outState.putString("sad", sadText.getText().toString()); 
     outState.putString("capsize", capsizeText.getText().toString()); 
     outState.putString("comfort", comfortText.getText().toString()); 

    } 
    super.onSaveInstanceState(outState); 
} 

/** 
* Restores previous instance state after rotation 
* @param savedInstanceState - saved previous state before rotation 
*/ 
@Override 
protected void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 

    if (savedInstanceState != null) { 
     loaBox.setText(savedInstanceState.getString("loabox")); 
     lwlBox.setText(savedInstanceState.getString("lwlbox")); 
     beamBox.setText(savedInstanceState.getString("beambox")); 
     displacementBox.setText(savedInstanceState.getString("displacementbox")); 
     saBox.setText(savedInstanceState.getString("sabox")); 

     mhsText.setText(savedInstanceState.getString("mhs")); 
     dlText.setText(savedInstanceState.getString("dl")); 
     sadText.setText(savedInstanceState.getString("sad")); 
     capsizeText.setText(savedInstanceState.getString("capsize")); 
     comfortText.setText(savedInstanceState.getString("comfort")); 

     results.setVisibility(savedInstanceState.getInt("results", results.getVisibility())); 
    } 
} 

setupUI()方法被稱爲我的onCreate()方法結束。

有沒有人知道這裏會出現什麼問題?

+0

請把它添加到您的清單「<活動機器人:windowSoftInputMode =‘stateAlwaysHidden’ >' – SathishKumar

+0

不,沒有工作。 –

+0

您是否將此添加到您擁有edittext的活動中? – SathishKumar

回答

0

請看看你的manifext文件,你可以在標籤,您需要添加的android內找到<activity>標籤:windowSoftInputMode =「stateAlwaysHidden」

+0

已經這樣做了,沒有運氣。 –