Intereting Posts
Какова наиболее вероятная причина исключений, загадочно избегающих блока try-catch в этом случае? Kotlin – Расширение для финального класса Служба создает новый экземпляр медиаплеера Почему модификатор Kotlin «open» несовместим с «данными»? Могу ли я сделать конструктор по умолчанию для класса, созданного из файла Kotlin private? Есть ли способ написать функцию расширения, которая изменяет значение объекта? Настроить аргументы компилятора Ошибка Adobe flashplayer или HTML5 Browser с поддержкой WebGL или CSS3D, необходимой для виртуального тура в Android Создание исполняемой толстой баночки с град-скрипт-котлин Можно ли получить строку в выражении лямбда? Как связать событие onClick из представления с помощью Android Binding Library и Kotlin? Добавить сгенерированное значение в объект RealmObject Издевательский интерфейс с Kotlin и Mockito Как ссылаться на класс Boolean java из kotlin? Какая версия Dokka идет с какой версией Kotlin?

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

люди. Я работаю над проектом с 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") } } 

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

Solutions Collecting From Web of "Как правильно реализовать интерфейс в фрагменте андроида?"

Я думаю, вы не должны добавлять тело метода к своему интерфейсу. В 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")