5
respostas

Como exibir um recyclerview dentro de um alertdialog em kotlin???

Como exibir um recyclerview dentro de um alertdialog em kotlin???

5 respostas

Oi Victor, tudo bem ?

Cara o AlertDialog tem um método chamado setView cujo recebe uma view nele.

O que tu pode fazer é construir uma view programaticamente, ou seja, instanciando view a view e fazendo a junção de layout para então jogar dentro desse método.

Espero ter ajudado.

Eu consigo exibir o layout porém, o recyclerview não aparece.

 override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)

        RVProfs.apply {
            setHasFixedSize(true)
            layoutManager = LinearLayoutManager(context)
        }


        launch {
            context?.let {
                launch {
                    val profs = MyDatabase(it).getDao().getAllProfessors()
                    RVProfs.adapter = ProfessorsAdapter(profs)
                }
            }

        }
}

//código omitido

XML

//código omitido

 <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/RVProfs"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="2dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/ETProfessorName" />

//código omitido

//função do alert

private fun Test() {
        context?.let {
            val profDialog = LayoutInflater.from(context).inflate(R.layout.fragment_add_professor, null)
            AlertDialog.Builder(it).apply {
                setTitle("Você está certo disso?")
                setView(profDialog)
                setPositiveButton("OK") { _, _ ->
                    launch {
                        navigateBack()
                    }
                }
                setNegativeButton("Cancelar") { _, _ -> }
                show()
            }
        }
    }

É um pouco dificil dar pitacos sem seu código completo :(

O método onActivityCreated geralmente é de algum Fragment, que por sinal foi marcado como obsoleto, se estiver dentro de algum fragment mesmo, você devia usar o método onViewCreate.

Se puder dar mais contexto do que está fazendo e mostrar mais o código a gente vai conseguir ajudar melhor :D

Oi Matheus veja se agora melhorou.

package br.com.example.jornada.ui

import android.app.AlertDialog
import android.os.Bundle
import android.view.*
import android.widget.Toast
import androidx.navigation.Navigation
import androidx.recyclerview.widget.LinearLayoutManager
import br.com.example.jornada.R
import br.com.example.jornada.room.MyDatabase
import br.com.example.jornada.room.Professor
import br.com.example.jornada.ui.adapter.ProfessorsAdapter
import kotlinx.android.synthetic.main.fragment_add_professor.*
import kotlinx.android.synthetic.main.fragment_home.*
import kotlinx.coroutines.launch

class AddProfessorFragment : BaseFragment() {

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        setHasOptionsMenu(true)
        return inflater.inflate(R.layout.fragment_add_professor, container, false)
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

//PRECISO CARREGAR UMA RECYCLERVIEW (LISTA DE PROFESSORES VINDO DA BASE DE DADOS). 

}
}

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/RVProfs"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="2dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

Victor, de boa ?

Mano, tem 2 coisas que eu vi que pode estar causando esse problema.

1) seu layout, você está usando constraint, mas não passou todas as constraints necessárias para o recycler view -> esqueceu de passar a app:layout_constraintBottom_toBottomOf="parent", além disso, a gente não usa match_parent, é preferível usar 0dp tanto na largura, quanto altura, nesse caso.

2) sua busca deveria ser feita no oncreateview, assim não teria tantos problemas.

Consegue fazer isso e falar pra gente se funcionou ou não.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software