您好我已经使用此DialogFragment在我的应用中显示日期选择器
public class DateDialogFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener{
public DateDialogFragment()
{
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Calendar cal=Calendar.getInstance();
int year=cal.get(Calendar.YEAR);
int month=cal.get(Calendar.MONTH);
int day=cal.get(Calendar.DAY_OF_MONTH);
return new DatePickerDialog(getActivity(), this, year, month, day);
}
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
showSetDate(year,monthOfYear,dayOfMonth);
}
}
public void showSetDate(int year,int month,int day) {
text.setText(year+"/+"+month+"/"+day);
}
如果在之前的应用程序中使用了相同的内容。 最近它DateDialogFragment表现得很厉害。在Eclipse中它显示错误DateDialogFragment应该是static.But当我清理项目一次。它没有在项目中显示任何错误,并且运行完美。我已经完成了这个DialogFragment,它确认它需要类是静态的。但是为什么它允许我使用这个事件,尽管我在清理项目时没有给静态。最近发生这种情况之前它没有显示任何这样的错误。当我与团队成员共享项目时,同样没有显示任何错误。为什么它会像这样......
答案 0 :(得分:3)
您看到这个的原因是因为Android有时需要自己实例化Fragment
。这适用于任何 Fragment
。
当您创建static
内部类时,这意味着它不依赖于外部类的任何特定实例。所以,假设你有:
public class A {
public static class B {
// ...
}
public class C {
// ...
}
}
在这种情况下,您无法从new C()
外部A
执行,因为C
的所有实例都属于A
个对象。但可以,new B()
或new A.B()
。
这同样适用于片段;如果类不是静态的,则Android无法执行new DateDialogFragment()
。你没有收到错误的原因(虽然Lint 应告诉你)是因为你自己实例化了DateDialogFragment
。
但是,如果您触发方向更改等内容并且未手动重新创建Fragment
,则Android会为您执行此操作。由于无法这样做,它会崩溃。
如果类是静态的,Android 可以创建它的实例。因此,嵌套的Fragment
类始终为static
。