Как правильно реализовать интерфейс в фрагменте андроида?

люди. Я работаю над проектом с kotlin, и мне нужно сделать фрагмент, который общается с родительской деятельностью … Я точно следил за тем, что предлагали Google и другие веб-сайты, но я все еще получаю сообщение об ошибке «Активность не отменяет ничего» … Все остальные решения для меня не работают … вот код.

ФРАГМЕНТ

package com.me.assistan.assistant import android.app.Activity import android.app.DatePickerDialog import android.app.TimePickerDialog import android.content.Context import android.content.Intent import android.graphics.drawable.GradientDrawable import android.os.Bundle import android.support.v4.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.CompoundButton import android.widget.LinearLayout import android.widget.ToggleButton import kotlinx.android.synthetic.main.content_newplan.* import java.util.* class addingTask : Fragment(), View.OnClickListener{ var func = Functions var globalTask = GlobalTask private lateinit var listener: OnTimeSettedListener override fun onAttach(context: Context?) { super.onAttach(context) if (context is OnTimeSettedListener) { listener = context } else { throw ClassCastException(context!!.toString() + " must implement OnTimeSettedListener.") } } companion object { fun newInstance(): addingTask { return addingTask() } } override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? { val view: View = inflater!!.inflate(R.layout.fragment_adding_task, container, false) val activity = activity view.theTime.setOnClickListener { v -> listener.onTimeSetListtedener("test") } return view } interface OnTimeSettedListener{ fun onTimeSetListtedener(comic : String){ println("ok") } } }// Required empty public constructor 

И не ГЛАВНАЯ ДЕЯТЕЛЬНОСТЬ

 class Newplan : AppCompatActivity(), addingTask.OnTimeSettedListener { var posx = 0f private var startx = 0f private var posy = 0f private var starty = 0f var backIntent = Intent(); var func = Functions var globalTask = GlobalTask val fragment = addingTask() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_newplan) if(savedInstanceState === null){ var args = Bundle() supportFragmentManager.beginTransaction() .add(R.id.taskMain, addingTask.newInstance(),"newTask") .commit() } } override fun onTimeSettedListener(comic : String){ println("params") } } 

Я получаю ошибку в классе активности … Когда я удаляю «переопределение?», Ошибка ушла, но ничего не происходит, когда я нажимаю кнопку … Что я делаю неправильно?

    Я думаю, вы не должны добавлять тело метода к своему интерфейсу. В Java это запрещено. В Котлине нет ошибки, показывающей, что тело метода ограничено. Но вы должны удалить тело. Измените свой интерфейс, как

     interface OnTimeSettedListener{ fun onTimeSetListtedener(comic : String) } 

    Также на самом деле вы не переопределяете метод Listener. Имя метода в OnTimeSettedListeneronTimeSetListtedener но вы переопределяете onTimeSettedListener который на самом деле не существует в вашем коде.

    Также как @albodelu упомянул ответ и @chris, упомянутый в комментариях, вы не можете писать методы в методах. Это неправильное использование.

    Как заметил @chris, вам нужно переместить строки ниже метода onCreate() :

      override fun onTimeSettedListener(comic: String) { println("params") } 

    Вам также необходимо сопоставить имена, заменяющие

     interface OnTimeSettedListener { fun onTimeSetListtedener(comic : String){ println("ok") } } 

    от

     interface OnTimeSettedListener { fun onTimeSettedListener(comic: String) { println("ok") } } 

    Обновить

    Если вы исправите onTimeSettedListener имя и удалите стандартную реализацию объявления onTimeSettedListener в интерфейсе внутри вашего фрагмента, поскольку ваша деятельность реализует его, а Android Studio предупреждает вас о недостающем переопределении, можно щелкнуть по нему и выбрать, что IDE реализует его для вы должны избегать ошибок:

     interface OnTimeSettedListener{ fun onTimeSettedListener(comic : String) } 

    Вам также необходимо исправить замену вызова:

     listener.onTimeSetListtedener("test") 

    от

     listener.onTimeSettedListener("test") 
    Intereting Posts
    TextClock в AppWidget не отвечает на вызовы функций Новый фрагмент Kotlin из Recyclerview Kotlin – извлечение списка родительских объектов предметов в коллекции Могу ли я использовать ClosedRange <T> в спящем режиме IntellJ IDEA Плагин Kotlin – «нет доступных конфигураторов» Вход Kotlin как BigInteger Почему я не могу указать, где я хочу, чтобы мой файл Kotlin был удален в Android Studio? Как получить родительский класс внутри анонимного класса в kotlin Smartcast невозможно, потому что у владельца есть открытый или пользовательский getter Невозможно запустить глобальное приложение hello, как показано в O'Reilly – Введение в программирование Kotlin Почему этот ChildEventListener не считывает данные с узла firebase? Использование @ Component.Builder с параметрами конструктора MailCore: результат htmlRenderingOperation всегда равен нулю Можно ли возвращать тот же тип, что и параметр типа, когда оператор Развитие библиотеки. Использование данных из внешнего источника