无法创建日期选择器对话框
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 的答案工作正常...... 该答案与您遇到的public
或 static
类错误无关。它只是促进切换到另一种弹出对话框的方式,完全放弃问题。虽然这可能对你有用,但它使这个问题对将来的参考毫无用处。
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 之前询问它是如何工作的是公平的。
以上是关于无法创建日期选择器对话框的主要内容,如果未能解决你的问题,请参考以下文章