无法创建日期选择器对话框

Posted

技术标签:

【中文标题】无法创建日期选择器对话框【英文标题】:Cannot create date picker dialog 【发布时间】:2015-03-31 17:22:23 【问题描述】:

我在我的活动中使用了一个类来创建一个日期选择器对话框,它一直在工作,直到我迁移到 android studio。 这是课程:

class StartDatePicker extends DialogFragment implements DatePickerDialog.OnDateSetListener
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) 
        // year, month, day από το onCreate
        DatePickerDialog dialog = new DatePickerDialog(Add_Expense.this, this, year, month, day);
        //DatePickerDialog(Context context, DatePickerDialog.OnDateSetListener callBack, int year, int monthOfYear, int dayOfMonth);
        return dialog;

    
    @Override
    public void onDateSet(DatePicker view, int year, int month,``
            int day) 
        processDate(year, month, day);

    
    private void processDate(int year, int month, int day) 
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.YEAR, year);
        cal.set(Calendar.MONTH, month);
        cal.set(Calendar.DAY_OF_MONTH, day);
        int day_ofWeeks = cal.get(Calendar.DAY_OF_WEEK);
        showDate(year, month, day, day_ofWeeks);
    



        public void showDatePickerDialog(View v) 
    DialogFragment newFragment = new StartDatePicker();
    newFragment.show(getFragmentManager(), "start_date_picker");

StartDatePicker 类现在引发错误:该片段类应该是公共的。在我将它声明为 public 之后,它会引发另一个错误:这个片段内部类应该是静态的。 我不想将其声明为静态,因为 private void showDate(int year, int month, int day, int day_ofWeek) 不起作用。

提前谢谢你。

【问题讨论】:

@Apurva 您对这个问题的回答如何?您是否阅读过 OP 面临的错误? 目前看来 Apurva 的答案工作正常...... 该答案与您遇到的 publicstatic 类错误无关。它只是促进切换到另一种弹出对话框的方式,完全放弃问题。虽然这可能对你有用,但它使这个问题对将来的参考毫无用处。 showDate() 定义在哪里? @nPn showDatePickerDialog 是通过 xml 从按钮调用的。 【参考方案1】:

可能有一种更简洁的方法可以做到这一点,但是,如果您将 StartDatePick 设为 public 和 static,那么您可以这样做:

在 StartDatePicker 中创建一个字段来保存对外部类的引用

OuterClassType  mDateShower;

并为该字段创建一个设置器。

public void setDateShower(OuterClassType dateShower) 
    mDateShower = dateShower;

然后将您对showDate(....); 的呼叫替换为mDateShower.showDate(...);

终于设置了dateShower

public void showDatePickerDialog(View v) 
    DialogFragment newFragment = new StartDatePicker();
    newFragment.setDateShower(this);
    newFragment.show(getFragmentManager(), "start_date_picker");

【讨论】:

感谢您的回答。你能告诉我更清洁的方法吗?我也觉得它的代码很糟糕,所以我使用了 Apurva 的推荐。 btn_dt2.setOnClickListener(new View.OnClickListener() public void onClick(View v) DatePickerDialog dpd = new DatePickerDialog(Add_Expense.this, new DatePickerDialog.OnDateSetListener() @Override public void onDateSet(DatePicker view, int year, int month, int day) processDate(year, month, day); , year, month, day); dpd.show(); ); 这样更好吗?谢谢。 它并不是真正“糟糕”的代码。 “更清洁”将使用像“DateShower”这样的接口,而不是具体的 OuterClassType(OuterClassType 将通过提供 showDate() 来实现。)但是,在迁移到 Android Studio 之前询问它是如何工作的是公平的。

以上是关于无法创建日期选择器对话框的主要内容,如果未能解决你的问题,请参考以下文章

如何创建新的“圆形”日期选择器 android 对话框

为啥 jQuery UI 日期选择器在 jQuery 对话框模式中不起作用?

仅包含日期和月份的Android日期选择器

如何在日期时间选择器对话框中更改天数的文本大小?

如何在日期选择器对话框中设置日期限制

日期/时间选择器不提供更改的值