我是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;
}
答案 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)
}