微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MaterialDatePicker,应用在选择结束日期后崩溃

如何解决MaterialDatePicker,应用在选择结束日期后崩溃

我有一个 MaterialDatePicker 可以选择一系列数据,例如来自 1 January 2021 to 31 January 2021

MaterialDatePicker.Builder<Pair<Long,Long>> builder = MaterialDatePicker.Builder.daterangePicker();

CalendarConstraints.Builder constraintsBuilder = new CalendarConstraints.Builder();

builder.setCalendarConstraints(constraintsBuilder.build());

int dialogTheme = resolveOrThrow(requireContext());

builder.setTheme(dialogTheme);

MaterialDatePicker<Pair<Long,Long>> picker = builder.build();

picker.show(requireActivity().getSupportFragmentManager(),picker.toString());

picker.addOnPositiveButtonClickListener(selection -> {

   long startDate = selection.first;
   long endDate = selection.second;

   from = DateFormat.format("yyyy-MM-dd",new Date(startDate)).toString();
   to = DateFormat.format("yyyy-MM-dd",new Date(endDate)).toString();

});


private static int resolveOrThrow(Context context) {

    TypedValue typedValue = new TypedValue();

    if (context.getTheme().resolveAttribute(R.attr.materialCalendarTheme,typedValue,true)) {
        return typedValue.data;
    }

    throw new IllegalArgumentException(context.getResources().getResourceName(R.attr.materialCalendarTheme));
}

打开 MaterialDatePicker 时,它会显示当前日期 01 February 2021。当我尝试从二月滚动到一月时,该月的最后一天不可见

enter image description here

要选择本月的最后一天,我应该向下滚动,但是当我选择本月的最后一天时,应用程序崩溃并显示错误

java.lang.NullPointerException:尝试在空对象引用上调用方法“int android.view.View.getLeft()” 在 com.google.android.material.datepicker.MaterialCalendarGridView.horizo​​ntalMidPoint(MaterialCalendarGridView.java:242) 在 com.google.android.material.datepicker.MaterialCalendarGridView.onDraw(MaterialCalendarGridView.java:172) 在 android.view.View.draw(View.java:23915) 在 android.widget.AbsListView.draw(AbsListView.java:4988) 在 android.view.View.updatedisplayListIfDirty(View.java:22790) 在 android.view.View.draw(View.java:23645) 在 android.view.ViewGroup.drawChild(ViewGroup.java:5336) 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:5093) 在 android.view.View.updatedisplayListIfDirty(View.java:22776) 在 android.view.View.draw(View.java:23645) 在 android.view.ViewGroup.drawChild(ViewGroup.java:5336) 在 androidx.recyclerview.widget.RecyclerView.drawChild(RecyclerView.java:5030) 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:5093) 在 android.view.View.draw(View.java:23918) 在 androidx.recyclerview.widget.RecyclerView.draw(RecyclerView.java:4429) 在 android.view.View.updatedisplayListIfDirty(View.java:22790) 在 android.view.View.draw(View.java:23645) 在 android.view.ViewGroup.drawChild(ViewGroup.java:5336) 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:5093) 在 android.view.View.updatedisplayListIfDirty(View.java:22776) 在 android.view.View.draw(View.java:23645) 在 android.view.ViewGroup.drawChild(ViewGroup.java:5336) 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:5093) 在 android.view.View.updatedisplayListIfDirty(View.java:22776) 在 android.view.View.draw(View.java:23645) 在 android.view.ViewGroup.drawChild(ViewGroup.java:5336) 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:5093) 在 android.view.View.updatedisplayListIfDirty(View.java:22776) 在 android.view.View.draw(View.java:23645) 在 android.view.ViewGroup.drawChild(ViewGroup.java:5336) 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:5093) 在 android.view.View.updatedisplayListIfDirty(View.java:22776) 在 android.view.View.draw(View.java:23645) 在 android.view.ViewGroup.drawChild(ViewGroup.java:5336) 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:5093) 在 android.view.View.updatedisplayListIfDirty(View.java:22776) 在 android.view.View.draw(View.java:23645) 在 android.view.ViewGroup.drawChild(ViewGroup.java:5336) 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:5093) 在 android.view.View.updatedisplayListIfDirty(View.java:22776) 在 android.view.View.draw(View.java:23645) 在 android.view.ViewGroup.drawChild(ViewGroup.java:5336) 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:5093) 在 android.view.View.updatedisplayListIfDirty(View.java:22776) 在 android.view.View.draw(View.java:23645) 在 android.view.ViewGroup.drawChild(ViewGroup.java:5336) 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:5093) 在 android.view.View.updatedisplayListIfDirty(View.java:22776) 在 android.view.View.draw(View.java:23645) 在 android.view.ViewGroup.drawChild(ViewGroup.java:5336) 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:5093) 在 android.view.View.draw(View.java:23918) 在 com.android.internal.policy.DecorView.draw(DecorView.java:1268) 在 android.view.View.updatedisplayListIfDirty(View.java:22790) 在 android.view.ThreadedRenderer.updateViewTreedisplayList(ThreadedRenderer.java:567) 在 android.view.ThreadedRenderer.updateRootdisplayList(ThreadedRenderer.java:573) 在 android.view.ThreadedRenderer.draw(ThreadedRenderer.java:650) 在 android.view.ViewRootImpl.draw(ViewRootImpl.java:4906) 在 android.view.ViewRootImpl.performDraw(ViewRootImpl.java:4613) 在 android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3754) 在 android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2519) 在 android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:9775) 2021-02-01 12:06:21.286 10369-10369/com.roko.hearth E/AndroidRuntime:在 android.view.Choreographer$CallbackRecord.run(Choreographer.java:1010) 在 android.view.Choreographer.doCallbacks(Choreographer.java:809) 在 android.view.Choreographer.doFrame(Choreographer.java:744) 在 android.view.Choreographer$FramedisplayEventReceiver.run(Choreographer.java:995) 在 android.os.Handler.handleCallback(Handler.java:938) 在 android.os.Handler.dispatchMessage(Handler.java:99) 在 android.os.Looper.loop(Looper.java:246) 在 android.app.ActivityThread.main(ActivityThread.java:8425) 在 java.lang.reflect.Method.invoke(Native Method) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:596) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)

我尝试查看错误指示的 MaterialCalendarGridView.java:242 并且有这一行:

  private static int horizontalMidPoint(@NonNull View view) {
     return view.getLeft() + view.getWidth() / 2;
  }

请问有什么帮助吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?