Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

560
Vistas
Kotlin: interfaz no inicializada al pasar datos entre fragmentos

Soy nuevo en el desarrollo de Android y hago una aplicación simple de lista de tareas pendientes para orientarme.

Tengo un fragmento de mi MainActivity que contiene una lista, llamada FragToDoList. También tengo una clase DialogAddToDo que extiende DialogFragment para abrir un cuadro de diálogo para ingresar la información del elemento de la lista de tareas pendientes. Tengo problemas para pasar los datos ingresados en DialogAddTodo a la clase FragToDoList para luego mostrarlos en la lista.

Dice que mi interfaz no está inicializada y no puedo encontrar una manera de resolver este problema. ¿Alguien tiene algunos consejos?

 class FragToDoList : Fragment(), DialogAddTodo.ToDoAddedListener { // TODO: Rename and change types of parameters private var param1: String? = null private var param2: String? = null private val toDoList: MutableList<ToDoItem>? = null lateinit var adapter: ToDoAdapter private lateinit var listViewItem: ListView lateinit var mContext: Context override fun onAttach(context: Context) { super.onAttach(context) mContext = context } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) arguments?.let { param1 = it.getString(ARG_PARAM1) param2 = it.getString(ARG_PARAM2) } } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { val view: View = inflater.inflate(R.layout.fragment_frag__to_do_list, container, false) listViewItem = view.findViewById(R.id.listView) //for showing items in list view // adapter = ToDoAdapter(mContext, toDoList!!) // listViewItem.adapter = adapter val fab = view.findViewById<FloatingActionButton>(R.id.fabAddTask) fab?.setOnClickListener { showAddTaskDialog(childFragmentManager); } // Inflate the layout for this fragment return view } private fun showAddTaskDialog(childFragmentManager:FragmentManager) { var dialog = DialogAddTodo() dialog.show(childFragmentManager,DialogAddTodo.TAG) } companion object { /** * Use this factory method to create a new instance of * this fragment using the provided parameters. * * @param param1 Parameter 1. * @param param2 Parameter 2. * @return A new instance of fragment FragTodoList. */ // TODO: Rename and change types and number of parameters @JvmStatic fun newInstance(param1: String, param2: String) = FragToDoList().apply { arguments = Bundle().apply { putString(ARG_PARAM1, param1) putString(ARG_PARAM2, param2) } } } override fun onToDoAdded(item: ToDoItem) { toast("added",mContext) } }

 class DialogAddTodo : DialogFragment() { interface ToDoAddedListener { fun onToDoAdded(item: ToDoItem) } private lateinit var onTodoAdded: ToDoAddedListener private val todoItemModel: TodoItemModel? =null companion object { const val TAG = "Dialog Add Task" } lateinit var mContext: Context override fun onAttach(context: Context) { super.onAttach(context) mContext = context } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { val view: View = inflater.inflate(R.layout.dialog_add_task, container, false) var addBut = view.findViewById<Button>(R.id.butAddTaskDialog) addBut.setOnClickListener() { val todoItemData = ToDoItem.createToDoItem() var taskNameText = view.findViewById<TextView>(R.id.editTextTaskName) if (taskNameText != null) todoItemData.itemDataText = taskNameText?.text.toString() todoItemData.done = false todoItemData.UID = getRandomString(Int.SIZE_BITS - 1) // Frag_ToDoList().adapter.notifyDataSetChanged() //b.setItem(todoItemData) //todoItemModel.setItem(todoItemData) onTodoAdded.onToDoAdded(todoItemData) this.dismiss() } return view } }

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Declaraste la variable lateinit

 private lateinit var onTodoAdded: ToDoAddedListener

sin embargo, permanece sin inicializar.

Cuando se accede a var no inicializado, arroja una excepción.

Debe asignar una variable, por ejemplo, usando el accesor:

 var dialog = DialogAddTodo() // Initialize listener dialog.setListener(this) dialog.show(childFragmentManager,DialogAddTodo.TAG)

En DialogAddTodo agregue el siguiente método:

 fun setListener(onTodoAdded: ToDoAddedListener) { this.onTodoAdded = onTodoAdded }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda