【发布时间】:2021-05-31 15:53:55
【问题描述】:
我正在尝试将这个很棒的日历事件库集成到我的 Kotlin 项目中
https://github.com/alamkanak/Android-Week-View
我创建了一个 Kotlin 项目。我无法在 Kotlin 中转换 MonthChangeListener
MonthLoader.MonthChangeListener mMonthChangeListener = new MonthLoader.MonthChangeListener() {
@Override
public List<WeekViewEvent> onMonthChange(int newYear, int newMonth) {
// Populate the week view with some events.
List<WeekViewEvent> events = getEvents(newYear, newMonth);
return events;
}
};
我把Java代码复制粘贴到Kotlin项目中,这里是转换的代码
val mMonthChangeListener = MonthChangeListener { newYear, newMonth -> // Populate the week view with some events.
getEvents(newYear, newMonth)
}
抛出错误
没有实现这个应用程序在启动时崩溃,这里是日志
021-05-31 19:21:18.163 27099-27099/com.calendar.event101 E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.calendar.event101, PID: 27099
java.lang.IllegalStateException: You must provide a MonthChangeListener
at com.alamkanak.weekview.WeekView.getMoreEvents(WeekView.java:882)
at com.alamkanak.weekview.WeekView.drawHeaderRowAndEvents(WeekView.java:616)
at com.alamkanak.weekview.WeekView.onDraw(WeekView.java:488)
at android.view.View.draw(View.java:17185)
at android.view.View.updateDisplayListIfDirty(View.java:16167)
at android.view.View.draw(View.java:16951)
at android.view.ViewGroup.drawChild(ViewGroup.java:3727)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3513)
at android.view.View.updateDisplayListIfDirty(View.java:16162)
at android.view.View.draw(View.java:16951)
at android.view.ViewGroup.drawChild(ViewGroup.java:3727)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3513)
at android.view.View.updateDisplayListIfDirty(View.java:16162)
at android.view.View.draw(View.java:16951)
at android.view.ViewGroup.drawChild(ViewGroup.java:3727)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3513)
at android.view.View.updateDisplayListIfDirty(View.java:16162)
at android.view.View.draw(View.java:16951)
at android.view.ViewGroup.drawChild(ViewGroup.java:3727)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3513)
at android.view.View.updateDisplayListIfDirty(View.java:16162)
at android.view.View.draw(View.java:16951)
at android.view.ViewGroup.drawChild(ViewGroup.java:3727)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3513)
at android.view.View.updateDisplayListIfDirty(View.java:16162)
at android.view.View.draw(View.java:16951)
at android.view.ViewGroup.drawChild(ViewGroup.java:3727)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3513)
at android.view.View.draw(View.java:17188)
at com.android.internal.policy.DecorView.draw(DecorView.java:753)
at android.view.View.updateDisplayListIfDirty(View.java:16167)
at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:648)
at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:654)
at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:762)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:2800)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2608)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2215)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1254)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6337)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:874)
at android.view.Choreographer.doCallbacks(Choreographer.java:686)
at android.view.Choreographer.doFrame(Choreographer.java:621)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:860)
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:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
【问题讨论】:
-
乍一看,您的问题似乎出在其他地方。上面的 Java/Kotlin 代码只创建了一个监听器,它还没有在任何地方使用它。错误说未提供侦听器,所以我猜在 Java 代码中您向库提供了
mMonthChangeListener而您没有在 Kotlin 中执行此操作。第二个问题类似:getEvents()似乎是您在 Java 代码中拥有的一些外部方法/函数,但您在 Kotlin 中没有它或者它无法访问。这是什么功能?与上述代码相关的位置在哪里?