android - Android Inside 自定义对话框:- 如何打开 DatePickerDialog?
问题描述
如果我想从自定义对话框中打开日期选择器对话框,请任何人帮助我,我有一个自定义对话框类,如下所示
public class ReceiptsDialog extends CustomActivity {
private static ReceiptsDialog instance;
private static Activity mContext;
private static Dialog customDialog;
static EditText tv_date;
public static ReceiptsDialog getInstance() {
if (instance == null) {
instance = new ReceiptsDialog();
}
return instance;
}
public void createDialog(Activity mContext,Dialogclick dialogclick) {
this.mContext = mContext;
this.dialogclick = dialogclick;
customDialog = new Dialog(mContext);
customDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
customDialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
customDialog.setContentView(R.layout.receipts_dialog);
customDialog.setCanceledOnTouchOutside(false);
customDialog.show();
init();
}
private void init() {
tv_date = customDialog.findViewById(R.id.et_date);
setTouchNClick(tv_date);
}
@Override
public void onClick(View v) {
super.onClick(v);
if (v == tv_date) {
DialogFragment dFragment = new DatePickerFragment();
dFragment.show(getSupportFragmentManager(), "Date Picker");
}
}
@SuppressLint("ValidFragment")
public static class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);
DatePickerDialog dpd = new DatePickerDialog(getActivity(), R.style.MyCalTheme, this, year, month, day);
return dpd;
}
@Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
final SimpleDateFormat dateViewFormatter = new SimpleDateFormat("dd-MMM-yyyy", Locale.US);//hh:mm:ss
Calendar choosen = Calendar.getInstance();
choosen.set(year, month, dayOfMonth);
tv_date.setText(dateViewFormatter.format(choosen.getTime()));
}
}
}
我想在点击 tv_date 时打开日期选择器对话框
但这给出了错误:
W/System.err: java.lang.IllegalStateException: Activity 已在 android.support.v4.app.FragmentManagerImpl 销毁。enqueueAction (FragmentManager.java:2114) 在 android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:683) 在 android.support.v4.app.BackStackRecord。
在 com.omegasoftware.olivepos.home.functions.ReceiptsDialog.onClick(ReceiptsDialog.java:141) 在 android.support.v4.app.DialogFragment.show(DialogFragment.java:144) 提交 (BackStackRecord.java:637) .view.View.performClick(View.java:5205) 在 android.os.Handler.handleCallback(Handler.java:739) 在 android.view.View$PerformClick.run(View.java:21164) 在 android.os。 Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:148) 在 android.app.ActivityThread.main(ActivityThread.java:5417) 在 java.lang.reflect.Method.invoke (本机方法)在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
解决方案
工作解决方案 常规对话框打开日期选择器:使用以下示例
public class ReceiptsDialog extends CustomActivity {
private Activity mContext;
private Dialog customDialog;
EditText tv_date;
public void createDialog(Activity mContext) {
this.mContext = mContext;
customDialog = new Dialog(mContext);
customDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
customDialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
customDialog.setContentView(R.layout.receipts_dialog);
customDialog.setCanceledOnTouchOutside(false);
customDialog.show();
init();
}
private void init() {
tv_date = customDialog.findViewById(R.id.et_date);
setTouchNClick(tv_date);
}
@Override
public void onClick(View v) {
super.onClick(v);
if (v == tv_date) {
View vv = v;
Calendar c = Calendar.getInstance();
DatePickerDialog dpd = new DatePickerDialog(mContext,
new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year,
int monthOfYear, int dayOfMonth) {
String s = dayOfMonth + "-"
+ (monthOfYear + 1) + "-" + year;
tv_date.setText(dayOfMonth + "-"
+ (monthOfYear + 1) + "-" + year);
}
}, c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DATE));
dpd.show();
}
}
}
推荐阅读
- python - VS Code Python 语法高亮只工作了一半
- sql-server - 使用 vb.net 更新 SQL Server 数据库中的表
- pandas - 用熊猫加载csv,错误的列
- sql - SQL 选择语句,用于识别“鲍勃”曾经写过的每一本书的合著者
- sql - 将 varchar 数据类型转换为 datetime 数据类型时出现问题
- php - PHP、jQuery 和 Chartist.Js:将数据库中的实时数据显示到图表中
- java - Selenium 测试在登录 POM 上抛出 NullPointerException
- bash - 将不定数量的参数传递给 bash 中的程序
- python - 检查 pandas 列是否包含列表中的所有元素
- python - 迭代 CSS 选择器以使用 Python 提取链接时出现过时元素引用错误