2

以前に尋ねられて回答されたように見える質問をして申し訳ありませんが、私が見つけた解決策はどれも私にはうまくいかないようです. ユーザーから文字列を取得するために、EditTextを使用してAlertDialogを作成しています。このダイアログが表示されている場合、ソフト キーボードは表示されず、ユーザーが EditText をタップすると、キーボードがポップアップ表示されます。ダイアログが表示された瞬間に EditText が自動的にフォーカスされ、キーボードが自動的に表示されるようにするにはどうすればよいですか?

ダイアログを作成して表示するための私のコードは次のとおりです。これらはすべて、メイン アクティビティのボタンのOnClickListener内にあります。

@Override
public void onClick(View v) {
    final EditText textFileName = new EditText(MainActivity.this);
    textFileName.setRawInputType(Configuration.KEYBOARD_QWERTY);
    textFileName.setInputType(InputType.TYPE_CLASS_TEXT);

    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this)
    .setTitle("Save Data")
    .setMessage("Specify file name for saved data.")
    .setView(textFileName)
    .setPositiveButton("OK", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
            // Do the file saving bit here
        }
    })
    .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
            // Do whatever you feel is important here
        }
    });
    AlertDialog dialog = builder.create();
    dialog.show();
}

今、私はこの問題の解決策を探し回り、2 つの答えを見つけまし。これらは両方とも、それぞれの元のポスターを満足させているように見えましたが、どちらも私にはうまくいきませんでした。何が間違っているのかわかりません。

上記のコードと最初のリンクに投稿された上位投票の回答に基づいた、私の最初の試みです。

@Override
public void onClick(View v) {
    final EditText textFileName = new EditText(MainActivity.this);
    textFileName.setRawInputType(Configuration.KEYBOARD_QWERTY);
    textFileName.setInputType(InputType.TYPE_CLASS_TEXT);

    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this)
    .setTitle("Save Data")
    .setMessage("Specify file name for saved data.")
    .setView(textFileName)
    .setPositiveButton("OK", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
            // Do the file saving bit here
        }
    })
    .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
            // Do whatever you feel is important here
        }
    });
    AlertDialog dialog = builder.create();
    dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
    dialog.show();
}

これは基本的に、 dialog.show()呼び出しの直前に追加された 1 行のコードですが、何も変更されません。EditText をタップするまで、ダイアログは依然として最も美しい EditText でポップアップしますが、キーボードは表示されません。

そして、2 番目のリンクで投票数が最も多かった回答に基づいて、試行 2 を次に示します。

@Override
public void onClick(View v) {
    final EditText textFileName = new EditText(MainActivity.this);
    textFileName.setRawInputType(Configuration.KEYBOARD_QWERTY);
    textFileName.setInputType(InputType.TYPE_CLASS_TEXT);
    textFileName.setOnFocusChangeListener(new OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            textFileName.post(new Runnable() {
                @Override
                public void run() {
                    InputMethodManager inputMethodManager = (InputMethodManager)MainActivity.this.getSystemService(Context.INPUT_METHOD_SERVICE);
                    inputMethodManager.showSoftInput(textFileName, InputMethodManager.SHOW_IMPLICIT);
                }
            });
        }
    });
    textFileName.requestFocus();

    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this)
    .setTitle("Save Data")
    .setMessage("Specify file name for saved data.")
    .setView(textFileName)
    .setPositiveButton("OK", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
            // Do the file saving bit here
        }
    })
    .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
            // Do whatever you feel is important here
        }
    });
    AlertDialog dialog = builder.create();
    dialog.show();
}

さっきと同じ話。

何か助けてください。大歓迎です。

4

1 に答える 1