简体   繁体   English

自定义From-To AlertDialog

[英]Custom From-To AlertDialog

i need a little help. 我需要一些帮助。 I've built an custom alert dialog that contains two date pickers(from - to).I'am inflating the layout for the alert from xml file,and when i'am trying to get the date values my program cashes.Here is the code: 我已经构建了一个自定义警报对话框,其中包含两个日期选择器(从 - 到)。我从xml文件中提取警报的布局,当我试图获取日期值时,我的程序会兑现。这是码:

         View fromToLayout = (View)getLayoutInflater().inflate(R.layout.from_to_layout, null);
         final DatePicker fromPicker  = (DatePicker) findViewById(R.id.dpFrom);
         final DatePicker toPicker  = (DatePicker) findViewById(R.id.dpTo);

        AlertDialog alert =  new AlertDialog.Builder(context).create();

           alert.setMessage("Insert Interval:");                
           alert.setView(fromToLayout,0,0,0,20);
           alert.setButton(DialogInterface.BUTTON_POSITIVE,"Ok", new DialogInterface.OnClickListener() 
           {

               @SuppressWarnings("deprecation")
                public void onClick(DialogInterface dialog, int which) 
                   {
                    // TODO Auto-generated method stub

                      Date  dateFrom = new Date(fromPicker.getYear()-1990, fromPicker.getMonth(),fromPicker.getDayOfMonth());
                      Date  dateTo =  new Date(toPicker.getYear() - 1990,toPicker.getMonth(),toPicker.getDayOfMonth());

                      SimpleDateFormat isoFormat = new SimpleDateFormat("yyyyMMdd",Locale.US);
                      SimpleDateFormat dispalyFormat =  new SimpleDateFormat("dd-MM-yyyy",Locale.US);

                      String fromDisplay =  dispalyFormat.format(dateFrom);
                      String toDisplay =  dispalyFormat.format(dateTo);
                      String fromValue = isoFormat.format(dateFrom);
                      String toValue = isoFormat.format(dateTo);

                      CashInInfoActivity.this.setTitle("Cash In " + fromDisplay + " - " + toDisplay );                      
                      DownloadCashInAsyncTask task =  new DownloadCashInAsyncTask(context);
                      task.execute(fromValue,toValue);

                      return;
                   }
            });

           alert.setButton(DialogInterface.BUTTON_NEGATIVE,"Cancel", new DialogInterface.OnClickListener()
           {

            public void onClick(DialogInterface dialog, int which) {
                // TODO Auto-generated method stub
                return;
                }
            });

           alert.show();

I get nullPointerException at line : Date dateFrom = new Date(fromPicker.getYear()-1990, fromPicker.getMonth(),fromPicker.getDayOfMonth()); 我在行获取nullPointerException: Date dateFrom = new Date(fromPicker.getYear()-1990, fromPicker.getMonth(),fromPicker.getDayOfMonth());

Log: 日志:

12-06 11:01:48.919: E/AndroidRuntime(24121): FATAL EXCEPTION: main
12-06 11:01:48.919: E/AndroidRuntime(24121): java.lang.NullPointerException
12-06 11:01:48.919: E/AndroidRuntime(24121):    at com.example.denandroidapp.CashInInfoActivity$1.onClick(CashInInfoActivity.java:98)
12-06 11:01:48.919: E/AndroidRuntime(24121):    at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:159)
12-06 11:01:48.919: E/AndroidRuntime(24121):    at android.os.Handler.dispatchMessage(Handler.java:99)
12-06 11:01:48.919: E/AndroidRuntime(24121):    at android.os.Looper.loop(Looper.java:123)
12-06 11:01:48.919: E/AndroidRuntime(24121):    at android.app.ActivityThread.main(ActivityThread.java:3687)
12-06 11:01:48.919: E/AndroidRuntime(24121):    at java.lang.reflect.Method.invokeNative(Native Method)
12-06 11:01:48.919: E/AndroidRuntime(24121):    at java.lang.reflect.Method.invoke(Method.java:507)
12-06 11:01:48.919: E/AndroidRuntime(24121):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
12-06 11:01:48.919: E/AndroidRuntime(24121):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
12-06 11:01:48.919: E/AndroidRuntime(24121):    at dalvik.system.NativeStart.main(Native Method)

Do you know what i'am doing wrong?thx 你知道我做错了吗?thx

Try to Change: 尝试改变:

final DatePicker fromPicker  = (DatePicker) findViewById(R.id.dpFrom);
final DatePicker toPicker  = (DatePicker) findViewById(R.id.dpTo);

to: 至:

final DatePicker fromPicker  = (DatePicker) fromToLayout.findViewById(R.id.dpFrom);
final DatePicker toPicker  = (DatePicker) fromToLayout.findViewById(R.id.dpTo);

You are getting null pointer exception for "fromPicker", the same exception will also applicable for "toPicker" also. 您正在获取“fromPicker”的空指针异常,同样的异常也适用于“toPicker”。

Reason for exception is : 例外原因是:

  • You are inflating your layout dynamically and you want reference of DatePicker. 您正在动态地夸大您的布局,并且您想要引用DatePicker。
  • Remember when ever you inflate any layout dynamically and want to fetch it's control then you have to call findViewById with view's object, like below 记住,当你动态地膨胀任何布局并想要获取它的控件时,你必须用视图的对象调用findViewById,如下所示

.

View fromToLayout = (View)getLayoutInflater().inflate(R.layout.from_to_layout, null);
final DatePicker fromPicker  = (DatePicker) fromToLayout.findViewById(R.id.dpFrom);
final DatePicker toPicker  = (DatePicker) fromToLayout.findViewById(R.id.dpTo);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM