簡體   English   中英

關閉后,帶有edittext的DialogFragment不會丟失鍵盤

[英]DialogFragment with edittext doesn't lose keyboard after dismissed

我有一個帶有單個EditText且沒有按鈕的自定義DialogFragment。 在將文本輸入到edittext中並按“完成”后,即使取消了對話框,鍵盤在返回到宿主活動時仍保持可見。 它更改為數字鍵盤,因為它所關注的主機活動中的字段僅是一個數字條目,即edittext但它也可能集中於具有常規文本輸入項(因此仍是普通鍵盤)的edittext字段,具體取決於我啟動對話框片段后,將光標移到左側。

我已經嘗試了所有我能找到的東西(已經用Google搜索和stackoverflow了很多)。

我基於代碼創建dialogfragment-它非常相似。

問題與非常相似,我認為原因可能相似,但是我的DialogFragment中沒有按鈕,因此盡管我認為沒有關系,但是我可以足夠緊密地遵循它,因此我無法遵循該解決方案。

我嘗試按照此處和此處的建議使用inputmethodmanager來關閉界面方法(在host活動中實現)中的鍵盤,以及DialogFragment類中的onCreateViewonEditorActiononDismiss 還嘗試了getDialog().getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); (也使用SOFT_INPUT_STATE_HIDDEN )在DialogFragment類方法中。 嘗試過mEditText.clearFocus(); 在所有DF類方法中也無濟於事。

任何人都可以幫忙嗎? 這與我所基於的David Chandler的代碼有關,還是我做錯了什么。 所有幫助,不勝感激。

如果有人要看的話,我在下面提供了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;
}
}

在您從DialogFragment返回的清單的主機活動標簽中,使用以下命令

android:windowSoftInputMode="stateHidden" 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM