Java AlertDialog上没有键盘,因为对话框上没有焦点,但仍处于后台活动,如何修复?

Java AlertDialog上没有键盘,因为对话框上没有焦点,但仍处于后台活动,如何修复?,java,android,dialog,keyboard,android-alertdialog,Java,Android,Dialog,Keyboard,Android Alertdialog,我在对话框中的列表中创建了一个edittext。最初,edittext被禁用,通过点击对话框中的另一个按钮,我将其启用。我进一步调试了它,发现重点仍然放在后台活动上,这导致键盘进入后台活动 只是要指出:我的编辑文本是数字 尝试了多个选项,但没有结果: 我发现,在对话框打开后,键盘将使用此选项启动后台活动 splitDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_

我在对话框中的列表中创建了一个edittext。最初,edittext被禁用,通过点击对话框中的另一个按钮,我将其启用。我进一步调试了它,发现重点仍然放在后台活动上,这导致键盘进入后台活动

只是要指出:我的编辑文本是数字

尝试了多个选项,但没有结果:

  • 我发现,在对话框打开后,键盘将使用此选项启动后台活动

        splitDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
    
    这两个选项都无法打开“键盘打开”对话框

    我还在XML生成过程中添加了editText框

    我的对话框代码:

    AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setView(dialogView);
        Dialog dialog = builder.create();
        builder.setTitle("Split Balance");
        builder.setPositiveButton("Ok", new SplitDialogCallback());
        dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
        splitDialog.show();
    
    请给我指路,因为我被这个问题困住了


    当我直接在对话框中添加一个EditText而不是在对话框的列表视图中添加一个EditText时,一切正常,但若我删除它,则会再次出现相同的问题。无法理解,如果在列表视图中编辑文本,为什么焦点不移动。

    android键盘非常智能,您不需要以这种方式切换其输入。请尝试一次

    删除此项:

    InputMethodManager keyboard = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
    keyboard.showSoftInput(null, InputMethodManager.SHOW_FORCED, null);
    

    然后我建议使用自定义对话框布局而不是视图。试试这个

        final Dialog splitDialog = new Dialog(this);
         splitDialog.setContentView(R.layout.abc_action_bar_decoryour_dialog_layout);
        //Button that you want to toggle the editText enabled
        Button btn = splitDialog.findViewById(R.id.your_button);
        btn.setOnClickListener(new OnClickListener() {
    
            @Override
            public void onClick(View v) {
                EditText editText =splitDialog.findViewById(R.id.your_edit_text);
                editText.setEnabled(true);
                editText.requestFocus();
            }
        });
        splitDialog.show();
    
    这是一个更好的使用对话框的方法,它给了你更多的自由,尤其是因为你使用自定义对话框布局


    我知道这并不能说明你的方法不起作用的原因。但这只是一个处理得更好的解决方案

    谢谢,但由于EditText位于对话框内部的listview中,因此如何查找buttEditTexton,因为列表视图中可能有多行。我添加了一个变通方法,添加了一个高度和重量为0的虚拟edittext,这样android会认为对话框中有一个编辑文本,并打开一个键盘。但这不是一个合适的解决方案。您是否使用自定义列表视图?然后我建议在列表视图适配器中添加单击侦听器上的按钮,代码将保持不变。我目前了解您的列表项各有一个按钮和一个edittext。我是否正确?是的,您是对的。我目前没有使用自定义列表视图,而是通过单独的XML文件在列表视图中添加自定义视图。感谢您的帮助,我将尝试此解决方案。
    splitDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
    
        final Dialog splitDialog = new Dialog(this);
         splitDialog.setContentView(R.layout.abc_action_bar_decoryour_dialog_layout);
        //Button that you want to toggle the editText enabled
        Button btn = splitDialog.findViewById(R.id.your_button);
        btn.setOnClickListener(new OnClickListener() {
    
            @Override
            public void onClick(View v) {
                EditText editText =splitDialog.findViewById(R.id.your_edit_text);
                editText.setEnabled(true);
                editText.requestFocus();
            }
        });
        splitDialog.show();