AlertDialog中的EditText字段不起作用

时间:2014-05-20 12:06:55

标签: android android-edittext android-alertdialog

我是android新手,尝试构建一个涉及一些简单数据输入和管理的简单应用。当我按照指南here时,通过警告对话框询问用户输入。一切正常,只是在出现AlertDialog后,EditText字段没有显示输入光标,并且它不会显示/更新我输入的文本。但是,按下“确定”后,我可以正确输入我输入的文本字符串。警告对话框中的按钮。这是涉及该对话框的xml文件和代码:

的xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout_root"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:padding="10dp" >

<TextView
    android:id="@+id/textView2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Type Your Message : "
    android:textAppearance="?android:attr/textAppearanceLarge" />

<EditText
    android:id="@+id/grade_in"
    android:inputType="text"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

</EditText>

代码:

Button grade_in = button;

  grade_in.setTag(tag);
  grade_in.setOnClickListener(new OnClickListener(){

        public void onClick(View btn) {

            LayoutInflater inflater = LayoutInflater.from(activity.getApplicationContext());
            View prompt_grade_in = inflater.inflate(R.layout.grade_in, null);

            final EditText input_field = (EditText)prompt_grade_in.findViewById(R.id.grade_in);

            AlertDialog.Builder alertBuilder = new AlertDialog.Builder(activity);

            alertBuilder.setView(prompt_grade_in);

            alertBuilder.setCancelable(true)
                        .setPositiveButton("OK", 
                                new DialogInterface.OnClickListener() {

                                    @Override
                                    public void onClick(DialogInterface dialog, int which) {
                                        // TODO Auto-generated method stub
                                        Log.v(null, input_field.getText().toString());

                                    }
                                })

                        .setNegativeButton("Cancel", 
                                new DialogInterface.OnClickListener() {

                                    @Override
                                    public void onClick(DialogInterface dialog, int which) {
                                        dialog.cancel();

                                    }
                        })

                        .setMessage("Grade for the course:");

            AlertDialog alert = alertBuilder.create();
            alert.show();

        }
  });

我尝试添加TextWatcher但它没有帮助。版本是这个问题的根源吗?因为我认为我几乎遵循了指南,除了我做了一些小改动。谢谢你的帮助!

P.S。包含按钮的页面调用输入对话框是一个片段。

更新 包含按钮的片段由ExpandableListView组成,根据此guide(第15部分)实现。上面实现警报对话框的代码位于自定义适配器类中,该类在列表中创建组项,在以下函数中:

public View getGroupView(int groupPosition, boolean isExpanded, View convertView, final ViewGroup parent) {

if (convertView == null) {
  convertView = inflater.inflate(R.layout.listrow_group, null);
}

CheckedTextView checkedTextView = (CheckedTextView) convertView.findViewById(R.id.textView1);

course courses = (course) getGroup(groupPosition);

((CheckedTextView) checkedTextView).setText(courses.code + " - " + courses.title);
((CheckedTextView) checkedTextView).setChecked(isExpanded);

String tag = courses.code + " - " + courses.title;

CheckBox checkbox = (CheckBox) convertView.findViewById(R.id.checkbox_course);
checkbox.setChecked(sharedPref.getBoolean(tag, false));
setBoxListener(checkbox, tag);

Button button = (Button) convertView.findViewById(R.id.grade_button);
setBtnListener(button, tag);

return convertView;
}

6 个答案:

答案 0 :(得分:1)

尝试将android:textCursorDrawable="@null"设置为EditText以进行输入光标显示

答案 1 :(得分:1)

首先检查您的导入。

如果您使用的是 androidx. 使用:

<块引用>

androidx.appcompat.app.AlertDialog

代替

<块引用>

导入 android.app.AlertDialog;

检查输入类型

答案 2 :(得分:0)

使用以下代码替换xml中的EditText代码。以下代码包含 标记,该标记在EditText中获得焦点。希望这能解决你的问题。

<EditText
    android:id="@+id/grade_in"
    android:inputType="text"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

        <requestFocus />

    </EditText>

答案 3 :(得分:0)

在创建AlertDialog之前调用软键盘。

alert.getWindow().setSoftInputMode(
                WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);

答案 4 :(得分:0)

由我的朋友确定并修复,结果证明这是一个小错误:

LayoutInflater inflater = LayoutInflater.from(activity.getApplicationContext());

相反它应该是:

LayoutInflater inflater = LayoutInflater.from(activity);

我认为我从一开始就在使用活动。 :(

答案 5 :(得分:0)

我也有这个问题...在我的情况下:我使用自定义对话框,在我的 DialogFragment 中扩展 AppCompatDialogFragment / dialog_custom.xml 和 EdidText;

我在对话框类的 onStart 中添加了以下代码并且在 EditText 中运行良好:

override fun onStart() {
     super.onStart()
     dialog!!.window!!.clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE or WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM)
}