有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

安卓如何在Kotlin中重写此方法(在Java中工作,但在Kotlin中不工作)

我正在为我的安卓 (Kotlin) project使用日历小部件

我需要在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中使用此代码。如果我复制/粘贴此代码,安卓 studio会提供转换代码的功能,但仍然无法工作

如何重写此方法


共 (3) 个答案

  1. # 1 楼答案

    在kotlin中,每当您想要实现一些回调时,都会创建匿名对象。在您的情况下,kotlin代码将是:-

    CompactCalendarView().setListener( object: CompactCalendarView.CompactCalendarViewListener {
      override fun onDayClick(dateClicked: Date?) {
        // write your code here
      }
    
      override fun onMonthScroll(firstDayOfNewMonth: Date?) {}
    }
    
  2. # 2 楼答案

    应该是这样的

    compactCalendarView.setListener(object :CompactCalendarView.setListener{
     override fun onDayClick{
    }
    }
    
  3. # 3 楼答案

    你可以这样做-:

     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()
                    }
                }
            })