2

我有一個帶有單個EditText且沒有按鈕的自定義DialogFragment。文本輸入edittext後,按「完成」後,即使對話框關閉,鍵盤在返回到主機活動時仍保持可見狀態。它更改爲數字鍵盤,因爲它所關注的主機活動中的字段僅爲edittext的數字條目 - 但它也可能會將焦點放在具有普通文本輸入的edittext字段I上(因此仍是普通鍵盤),具體取決於我在哪裏在我開始對話框片段之後離開光標。帶edittext的DialogFragment在解散之後不會丟失鍵盤

我已經試過了我能找到的所有東西(已經用google和stackoverflow了很多)。

我基於對話框片段this代碼 - 它非常相似。

該問題與this非常相似,我認爲原因可能相似,但我的DialogFragment中沒有按鈕,所以我不能遵循該解決方案,儘管我不認爲它很重要,我可以密切關注它足夠。

我已經使用inputmethodmanager作爲建議存在和here駁回鍵盤嘗試,接口方法(在主機活動實現)內,並且onCreateView,所述DialogFragment類內onEditorActiononDismiss。還在DialogFragment類方法中嘗試getDialog().getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);(也使用SOFT_INPUT_STATE_HIDDEN)。在所有DF類方法中嘗試mEditText.clearFocus();也無濟於事。

任何人都可以幫忙嗎?這是否與David Chandler's code我的基礎相關,或者是我做錯了什麼。所有幫助最讚賞。

我在下面列出了我的DF類,以防萬一人想看。

public class SetText extends DialogFragment { 


public interface SetTextBoxDialogListener{ 
    void onFinishEnteringName(String name); 
} 


private EditText mEditText; 

//Empty constructor req'd for dialogfragment. 
public SetText(){ 

} 


//Build view 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle saveInstanceState) { 
    View view = inflater.inflate(R.layout.activity_set_the_text, container); 
    mEditText = (EditText) view.findViewById(R.id.nameText); 
    getDialog().setTitle("Enter Name"); 


    //removing these 2 lines of code has no effect 
    mEditText.requestFocus(); 
    getDialog().getWindow().setSoftInputMode(LayoutParams.VISIBLE); 


    mEditText.setOnEditorActionListener(new OnEditorActionListener() { 
     public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
      if (EditorInfo.IME_ACTION_DONE==actionId){ 
       //return text to activity 
       SetEnterNameDialogListener activity = (SetEnterNameDialogListener) getActivity(); 
       activity.onFinishEnteringName(mEditText.getText().toString()); 


       dismiss(); 
       return true; 
      } 
      //code for 2 lines below had now effect, even placed above dismiss 
      InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); 
      imm.hideSoftInputFromWindow(mEditText.getWindowToken(), 0); 

     return false; 
    } 
}); 

return view; 
} 
} 
+0

你可以嘗試類似如下的解決方案,但延長dimiss(),而不是取消( )http://stackoverflow.com/a/23477289/1339200 – k3v 2014-05-05 16:28:50

回答

1
在那裏你是從DialogFragment返回使用清單中的主機活動標籤

以下

android:windowSoftInputMode="stateHidden" 
+0

我已經得到了這一點,以防止當我開始恐懼的主機活動時出現鍵盤。 – nme32 2013-03-13 10:11:46

+0

謝謝,這爲我解決了它。 – Eduard 2014-05-09 17:01:43