【发布时间】:2017-04-26 12:07:34
【问题描述】:
我正在尝试制作一个带走一些东西的片段:
日期
重量
身高
注意事项
现在我被 datePicker 卡住了。 我设法让对话框出现,但是当我选择一个日期时,它会强制关闭应用程序。 我希望它采用我选择的日期并将其显示在此标签中
: 日/月/年
试图期待其他问题,但没有一个对我有帮助。 希望你能:) 这是片段:
public class NewTracker extends Fragment {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.newtracker, container, false);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
getActivity().setTitle("מעקב חדש");
EditText dateSelect = (EditText)getView().findViewById(R.id.dateSelect);
dateSelect.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DialogFragment picker = new DatePickerFragment();
picker.show(getFragmentManager(), "datePicker");
}
});
}
}
这里是日期选择器片段:
public class DatePickerFragment extends DialogFragment
implements DatePickerDialog.OnDateSetListener {
@RequiresApi(api = Build.VERSION_CODES.N)
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the current date as the default date in the picker
final Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DAY_OF_MONTH);
// Create a new instance of DatePickerDialog and return it
return new DatePickerDialog(getActivity(), this, year, month, day);
}
@RequiresApi(api = Build.VERSION_CODES.N)
@Override
public void onDateSet(DatePicker view, int year, int month, int day) {
Calendar c = Calendar.getInstance();
c.set(year, month, day);
EditText edittext = (EditText) getView().findViewById(R.id.dateSelect);
String myFormat = "dd/MM/yy"; //In which you need put here
SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US);
edittext.setText(sdf.format(c.getTime()));
}
}
这是错误日志。
Error:
04-26 15:12:47.022 14245-14245/com.example.matancohen.sg50 E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.matancohen.sg50, PID: 14245
java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference
at com.example.matancohen.sg50.DatePickerFragment.onDateSet(DatePickerFragment.java:40)
at android.app.DatePickerDialog.onClick(DatePickerDialog.java:171)
at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:175)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6692)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)
ahmad 解决后的错误日志:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.matancohen.sg50, PID: 23173
java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference
at com.example.matancohen.sg50.NewTracker.<init>(NewTracker.java:43)
at com.example.matancohen.sg50.Tracking$1.onClick(Tracking.java:41)
at android.view.View.performClick(View.java:6207)
at android.view.View$PerformClick.run(View.java:23639)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6692)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)
当我在选择日期后单击“确定”时,它会给我一个强制崩溃 我能做些什么? 谢谢!
【问题讨论】:
-
你能贴出错误日志吗?
-
getView().findViewById(R.id.dateSelect);你的 DatePickerDialog 必须以这种方式包含R.id.dateSelect。有吗? -
你得到一个空指针异常,因为我认为你的
DatePickerDialog中没有R.id.dateSelect -
把你的堆栈跟踪放在这里
-
编辑了问题@s
标签: java android android-fragments datepicker