我正在为我的安卓(Kotlin(项目使用日历小部件。
我需要在 Kotlin 中对onDayClick()
侦听器进行编码,以便我知道用户选择哪一天。
根据 github 页面中的示例代码。为此,代码如下:
compactCalendarView.setListener(new CompactCalendarView.CompactCalendarViewListener() {
@Override
public void onDayClick(Date dateClicked) {
toolbar.setTitle(dateFormatForMonth.format(dateClicked));
List<Event> bookingsFromMap = compactCalendarView.getEvents(dateClicked);
Log.d(TAG, "inside onclick " + dateFormatForDisplaying.format(dateClicked));
if (bookingsFromMap != null) {
Log.d(TAG, bookingsFromMap.toString());
mutableBookings.clear();
for (Event booking : bookingsFromMap) {
mutableBookings.add((String) booking.getData());
}
adapter.notifyDataSetChanged();
}
}
我需要重写的方法编写为日历库中的接口:
public class CompactCalendarView extends View {
public interface CompactCalendarViewListener {
public void onDayClick(Date dateClicked);
public void onMonthScroll(Date firstDayOfNewMonth);
}
我无法使此代码在 Kotlin 中工作。如果我复制/粘贴此代码,android 工作室提供转换代码,但它仍然不起作用。
如何覆盖此方法?
在 kotlin 中,每当你想要实现一些回调时,你都会创建匿名对象。在您的情况下,kotlin 代码将是:-
CompactCalendarView().setListener( object: CompactCalendarView.CompactCalendarViewListener {
override fun onDayClick(dateClicked: Date?) {
// write your code here
}
override fun onMonthScroll(firstDayOfNewMonth: Date?) {}
}
你可以这样做:
compactCalendarView.setListener(object : CompactCalendarView.CompactCalendarViewListener() {
fun onDayClick(dateClicked: Date) {
toolbar.setTitle(dateFormatForMonth.format(dateClicked))
val bookingsFromMap = compactCalendarView.getEvents(dateClicked)
Log.d(FragmentActivity.TAG, "inside onclick " + dateFormatForDisplaying.format(dateClicked))
if (bookingsFromMap != null) {
Log.d(FragmentActivity.TAG, bookingsFromMap!!.toString())
mutableBookings.clear()
for (booking in bookingsFromMap!!) {
mutableBookings.add(booking.getData() as String)
}
adapter.notifyDataSetChanged()
}
}
})
应该是这样的
compactCalendarView.setListener(object :CompactCalendarView.setListener{
override fun onDayClick{
}
}