我有一個帶有單個EditText且沒有按鈕的自定義DialogFragment。文本輸入edittext後,按「完成」後,即使對話框關閉,鍵盤在返回到主機活動時仍保持可見狀態。它更改爲數字鍵盤,因爲它所關注的主機活動中的字段僅爲edittext
的數字條目 - 但它也可能會將焦點放在具有普通文本輸入的edittext字段I上(因此仍是普通鍵盤),具體取決於我在哪裏在我開始對話框片段之後離開光標。帶edittext的DialogFragment在解散之後不會丟失鍵盤
我已經試過了我能找到的所有東西(已經用google和stackoverflow了很多)。
我基於對話框片段this代碼 - 它非常相似。
該問題與this非常相似,我認爲原因可能相似,但我的DialogFragment中沒有按鈕,所以我不能遵循該解決方案,儘管我不認爲它很重要,我可以密切關注它足夠。
我已經使用inputmethodmanager
作爲建議存在和here駁回鍵盤嘗試,接口方法(在主機活動實現)內,並且onCreateView
,所述DialogFragment類內onEditorAction
和onDismiss
。還在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;
}
}
你可以嘗試類似如下的解決方案,但延長dimiss(),而不是取消( )http://stackoverflow.com/a/23477289/1339200 – k3v 2014-05-05 16:28:50