java - 如果 DatePicker 在 AlertDialog 内,则不会在 EditText 单击上显示
问题描述
按照我的Java代码:
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getContext());
alertDialogBuilder.setView(promptView);
alertDialogBuilder.setCancelable(false)
.setPositiveButton(R.string.add, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
final EditText etDate = promptView.findViewById(R.id.etDate);
etDate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final Calendar c = Calendar.getInstance();
DatePickerDialog dpd = new DatePickerDialog(getContext(),
new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year,
int monthOfYear, int dayOfMonth) {
etDate.setText(dayOfMonth + "-"
+ (monthOfYear + 1) + "-" + year);
}
}, c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DATE));
dpd.show();
}
});
}
});
AlertDialog alert = alertDialogBuilder.create();
alert.show();
以下etDate
:
<EditText
android:id="@+id/etDate"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Date"
android:focusable="false"
android:inputType="date" />
如果您单击 EditText,则绝对不会发生任何事情。请注意,EditText 在 AlertDialog 内,所有内容都在片段内。
解决方案
您需要OnClick
在创建对话框期间设置,而不是单击 PositiveButton 按钮。
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getContext());
alertDialogBuilder.setView(promptView);
alertDialogBuilder.setCancelable(false);
final EditText etDate = promptView.findViewById(R.id.etDate);
etDate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final Calendar c = Calendar.getInstance();
DatePickerDialog dpd = new DatePickerDialog(getContext(),
new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year,
int monthOfYear, int dayOfMonth) {
etDate.setText(dayOfMonth + "-"
+ (monthOfYear + 1) + "-" + year);
}
}, c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DATE));
dpd.show();
}
});
alertDialogBuilder.setPositiveButton(R.string.add, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
}
});
AlertDialog alert = alertDialogBuilder.create();
alert.show();
推荐阅读
- sql - SQL Server 选择语句列
- android - 强制 RxJava 缓冲区刷新信号
- python - 与虚拟环境混合时 pip 的位置和方式
- r - 重命名R中一列中的所有值
- android - 无法解析 Android 支持库中的符号“测试”
- azure - 如何有效地破坏 Azure 中的 terraform 配置?
- javascript - 调试页面稍后插入的 JavaScript
- http - JMeter HTTP Sampler - 仅在主页上请求 GET 成功,任何其他页面返回 404
- django - to_representation 采用两种不同的值类型
- node.js - axios手动设置Content-Length,nodeJS