単一の EditText とボタンのないカスタム DialogFragment があります。テキストが edittext に入力され、「完了」を押した後、ダイアログが閉じられても、ホスト アクティビティに戻ったときにキーボードが表示されたままになります。フォーカスするホストアクティビティのフィールドは数値入力のみであるため、数値キーボードに変更されますが、edittext
離れた場所に応じて、通常のテキスト入力を使用して edittext フィールドにフォーカスすることもできます (したがって、通常のキーボードのままです)。ダイアログフラグメントを開始した後のカーソル。
私は見つけることができるすべてを試しました(グーグルとスタックオーバーフローがたくさんありました)。
このコードに基づいてダイアログフラグメントを作成しました。これは非常に似ています。
問題はこれと非常によく似ており、原因も似ていると思いますが、DialogFragmentにボタンがないため、その解決策をたどることはできませんが、十分に追跡できるかどうかは問題ではないと思います.
インターフェイス メソッド (ホスト アクティビティに実装されている)内、およびDialogFragment クラス内で、キーボードを閉じるために、こちらとこちらでinputmethodmanager
提案されているように使用してみました。DialogFragment クラスのメソッドでも試してみました(これも を使用)。すべての DF クラス メソッドで試してみましたが、役に立ちませんでした。onCreateView
onEditorAction
onDismiss
getDialog().getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
SOFT_INPUT_STATE_HIDDEN
mEditText.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;
}
}