您好,我已使用此 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 应该是静态的。但是当我清理项目一次时。项目中没有显示任何错误,并且运行完美。我经历过这个对话框片段 http://developer.android.com/reference/android/app/DialogFragment.html它确认它需要类是静态的。但是为什么它允许我使用这个,即使我在清理项目时没有给出静态。最近发生过这种情况,之前没有显示任何类似的错误。当我与团队成员共享项目时,同样没有显示任何错误。为什么会有这样的表现..
您看到这个的原因是 Android 有时需要实例化它Fragment
在其自己的。这适用于any Fragment
.
当您创建一个static
内部类,这意味着它不依赖于外部类的任何特定实例。假设您有:
public class A {
public static class B {
// ...
}
public class C {
// ...
}
}
在这种情况下,你不能这样做new C()
从外面A
因为所有实例C
属于一个A
目的。你can,但是,做new B()
or new A.B()
.
这同样适用于片段;安卓做不到new DateDialogFragment()
如果类不是静态的。您没有收到错误的原因(尽管 Lintshould告诉你)是因为你正在实例化DateDialogFragment
你自己。
但是,如果您触发方向更改之类的操作并且不重新创建Fragment
手动,Android 会为你做这件事。如果做不到这一点,它就会崩溃。
如果班级is静态的,但是,Androidcan创建它的一个实例。因此,一个嵌套的Fragment
类应该always be static
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)