3

単一の EditText とボタンのないカスタム DialogFragment があります。テキストが edittext に入力され、「完了」を押した後、ダイアログが閉じられても、ホスト アクティビティに戻ったときにキーボードが表示されたままになります。フォーカスするホストアクティビティのフィールドは数値入力のみであるため、数値キーボードに変更されますが、edittext離れた場所に応じて、通常のテキスト入力を使用して edittext フィールドにフォーカスすることもできます (したがって、通常のキーボードのままです)。ダイアログフラグメントを開始した後のカーソル。

私は見つけることができるすべてを試しました(グーグルとスタックオーバーフローがたくさんありました)。

このコードに基づいてダイアログフラグメントを作成しました。これは非常に似ています。

問題はこれと非常によく似ており、原因も似ていると思いますが、DialogFragmentにボタンがないため、その解決策をたどることはできませんが、十分に追跡できるかどうかは問題ではないと思います.

インターフェイス メソッド (ホスト アクティビティに実装されている)内、およびDialogFragment クラス内で、キーボードを閉じるために、こちらとこちらでinputmethodmanager提案されているように使用してみました。DialogFragment クラスのメソッドでも試してみました(これも を使用)。すべての DF クラス メソッドで試してみましたが、役に立ちませんでした。onCreateViewonEditorActiononDismissgetDialog().getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);SOFT_INPUT_STATE_HIDDENmEditText.clearFocus();

誰でも助けることができますか?それは、私がベースにしたデビッド・チャンドラーのコードに関係しているのでしょうか、それとも私が具体的に間違っていることでしょうか。すべてのヘルプが最も高く評価されています。

誰かが見たい場合に備えて、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;
}
}
4

1 に答える 1

2

DialogFragmentから戻るマニフェストのホストアクティビティタグで、次を使用します

android:windowSoftInputMode="stateHidden" 
于 2013-03-13T02:23:14.790 に答える