Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Synthetic não disponível

Eis o código

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.Observer
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.LinearLayoutManager
import br.com.souza.xavier.fernando.technews.R
import br.com.souza.xavier.fernando.technews.ui.fragment.extensions.mostraErro
import br.com.souza.xavier.fernando.technews.ui.recyclerview.adapter.ListaNoticiasAdapter
import br.com.souza.xavier.fernando.technews.ui.viewmodel.ListaNoticiasViewModel
import org.koin.androidx.viewmodel.ext.android.viewModel



private const val MENSAGEM_FALHA_CARREGAR_NOTICIAS = "Não foi possível carregar as novas notícias"

class ListaNoticiasFragment : Fragment() {

    private val adapter by lazy {
        context?.let {
            ListaNoticiasAdapter(context = it)
        } ?: throw IllegalArgumentException("Contexto inválido")
    }
    private val viewModel: ListaNoticiasViewModel by viewModel()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        buscaNoticias()
    }

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

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

    private fun configuraFabAdicionaNoticia() {
        lista_noticias_fab_salva_noticia.setOnClickListener {
//            abreFormularioModoCriacao()
        }
    }

    private fun configuraRecyclerView() {
        val divisor = DividerItemDecoration(context, LinearLayoutManager.VERTICAL)
        lista_noticias_recyclerview.addItemDecoration(divisor)
        lista_noticias_recyclerview.adapter = adapter
        configuraAdapter()
    }

    private fun configuraAdapter() {
//        adapter.quandoItemClicado = this::abreVisualizadorNoticia
    }

    private fun buscaNoticias() {
        viewModel.buscaTodos().observe(this, Observer { resource ->
            resource.dado?.let { adapter.atualiza(it) }
            resource.erro?.let {
                mostraErro(MENSAGEM_FALHA_CARREGAR_NOTICIAS)
            }
        })
    }


}

Este é exatamente o código do curso. Única diferença é que o professor consegue fazer o import da classe

import kotlinx.android.synthetic.main.lista_noticias.*

Eu não consigo

Pergunta é : esqueci de add alguma dependência? Ou caminho do import mudou?

Tentei inflar o fragment via "view Binding" e não consegui

private val binding by lazy { 
        ListaNoticiasBinding.inflate(layoutInflater)
}
    
    
    ...
    
    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        return inflater.inflate(
            binding.root,
            container,
            false
        )
    }
    

Isso não compila

tentei não usar esse sintetic e usar a Classe R

private fun configuraRecyclerView() {
        val divisor = DividerItemDecoration(context, LinearLayoutManager.VERTICAL)
        R.id.lista_noticias_recyclerview.addItemDecoration(divisor)
        R.id.lista_noticias_recyclerview.adapter = adapter
        configuraAdapter()
    }

Isso também não compila

Não achei como fazer

3 respostas

Esse curso é bem antigo, pra lá de 2022, até hoje mudaram muitas coisas

Seria bom mandar uma mensagem pra alura falando disso, pois não vi nada no teu código que possa ter erro

contato@alura.com.br

Obrigado Estudante. Vou fazer contato.

solução!

Se alguém chegou aqui com o mesmo problema... faça o seguinte

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

Para resolver o problema da falta do import do sinthetic você vai precisar localizar as views pela função "findViewById" O problema é que em geral essa função não existe em fragments.... mas tem um jeitinho pra poder usar... Segue

private fun configuraFabAdicionaNoticia() {
        val fab = requireView().findViewById<FloatingActionButton>(R.id.lista_noticias_fab_salva_noticia)
        fab.setOnClickListener {
            //códigofuturo
        }
    }
    
    private fun configuraRecyclerView() {
        val recyclerview = requireView().findViewById<RecyclerView>(R.id.lista_noticias_recyclerview)
        val divisor = DividerItemDecoration(context, LinearLayoutManager.VERTICAL)
        recyclerview.addItemDecoration(divisor)
        recyclerview.adapter = adapter
        configuraAdapter()
    }

Por hora é possível continuar o curso. Não sei se essa solução pode ser mantida até o final. Mas com isso consegui seguir em frente