android – 当方向更改时,强制关闭并打开日期对话框

前端之家收集整理的这篇文章主要介绍了android – 当方向更改时,强制关闭并打开日期对话框前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我有一个活动,我想要的只是

Activity–> OnClick of Some layout (That has textview)–>Open
Datepicker–> set selected value in txtvalue

我想要使​​用带有代码的DialogFragment的aceess Datepicker.

  1. package com.app.ourforms.date;
  2. import java.util.Calendar;
  3. import android.app.DatePickerDialog;
  4. import android.app.Dialog;
  5. import android.app.DialogFragment;
  6. import android.os.Bundle;
  7. import android.util.Log;
  8. import android.widget.DatePicker;
  9. import android.widget.TextView;
  10. public class DatePickerFragment extends DialogFragment implements
  11. DatePickerDialog.OnDateSetListener {
  12. TextView txt;
  13. public DatePickerFragment() {
  14. }
  15. public DatePickerFragment(TextView txt) {
  16. this.txt = txt;
  17. }
  18. @Override
  19. public Dialog onCreateDialog(Bundle savedInstanceSateate) {
  20. Log.i("TAG","Inside onCreateDialog");
  21. final Calendar c = Calendar.getInstance();
  22. int year = c.get(Calendar.YEAR);
  23. int month = c.get(Calendar.MONTH);
  24. int day = c.get(Calendar.DAY_OF_MONTH);
  25. return new DatePickerDialog(getActivity(),this,year,month,day);
  26. }
  27. public void onDateSet(DatePicker view,int year,int month,int day) {
  28. Log.i("TAG","Inside onDateSet");
  29. txt.setText(day + "/" + (month + 1) + "/" + year);
  30. // Do something with the date chosen
  31. }
  32. }

上面的代码当Device没有改变它的方向时工作正常.但是当显示Datepicker并且方向更改时,我将强制关闭,如下所示

  1. 01-04 07:34:14.580: E/AndroidRuntime(2375): FATAL EXCEPTION: main
  2. 01-04 07:34:14.580: E/AndroidRuntime(2375): java.lang.NullPointerException
  3. 01-04 07:34:14.580: E/AndroidRuntime(2375): at com.app.ourforms.date.DatePickerFragment.onDateSet(DatePickerFragment.java:39)
  4. 01-04 07:34:14.580: E/AndroidRuntime(2375): at android.app.DatePickerDialog.tryNotifyDateSet(DatePickerDialog.java:148)
  5. 01-04 07:34:14.580: E/AndroidRuntime(2375): at android.app.DatePickerDialog.onClick(DatePickerDialog.java:116)
  6. 01-04 07:34:14.580: E/AndroidRuntime(2375): at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:166)
  7. 01-04 07:34:14.580: E/AndroidRuntime(2375): at android.os.Handler.dispatchMessage(Handler.java:99)
  8. 01-04 07:34:14.580: E/AndroidRuntime(2375): at android.os.Looper.loop(Looper.java:137)
  9. 01-04 07:34:14.580: E/AndroidRuntime(2375): at android.app.ActivityThread.main(ActivityThread.java:5039)
  10. 01-04 07:34:14.580: E/AndroidRuntime(2375): at java.lang.reflect.Method.invokeNative(Native Method)
  11. 01-04 07:34:14.580: E/AndroidRuntime(2375): at java.lang.reflect.Method.invoke(Method.java:511)
  12. 01-04 07:34:14.580: E/AndroidRuntime(2375): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
  13. 01-04 07:34:14.580: E/AndroidRuntime(2375): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
  14. 01-04 07:34:14.580: E/AndroidRuntime(2375): at dalvik.system.NativeStart.main(Native Method)

这是我调用DatePickerFragment的方法

  1. public void showDatePickerDialog(View v) {
  2. Log.i("TAG","Inside showDatePickerDialog");
  3. DialogFragment newFragment = new DatePickerFragment((TextView)v);
  4. newFragment.show(getFragmentManager(),"datePicker");
  5. }

请帮我摆脱这个.
提前致谢.

最佳答案
我不确定这个解决方案适合你,但你可以尝试一下.

您面临的问题是因为每次定向更改时您的活动都会重新加载.您可以调用OnConfigurationchanged()方法,在Menifest文件中可以将Configuchanges设置为orientation | screensize

通过执行此操作,您的活动将不会在方向更改时加载,并且您将不会更长时间面对您当前面临的问题.

可以帮到你.

猜你在找的Android相关文章