Olá, estou com esse erro quando vou executar o app
e: C:\Users\mfc20\Navigation1\app\src\main\java\br\com\alura\aluraesporte\ui\activity\ProdutosActivity.kt: (28, 5): 'onAttachFragment' overrides nothing
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Olá, estou com esse erro quando vou executar o app
e: C:\Users\mfc20\Navigation1\app\src\main\java\br\com\alura\aluraesporte\ui\activity\ProdutosActivity.kt: (28, 5): 'onAttachFragment' overrides nothing
Código:
package br.com.alura.aluraesporte.ui.activity
import android.os.Bundle
import android.widget.Toast
import androidx.annotation.NonNull
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment
import br.com.alura.aluraesporte.R
import br.com.alura.aluraesporte.ui.fragment.DetalhesProdutoFragment
import br.com.alura.aluraesporte.ui.fragment.ListaProdutosFragment
import br.com.alura.aluraesporte.ui.fragment.PagamentoFragment
import org.koin.android.ext.android.inject
private const val COMPRA_REALIZADA = "Compra realizada"
class ProdutosActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.produtos_activity)
if (savedInstanceState == null) {
val produtosFragment: ListaProdutosFragment by inject()
transacaoFragment {
replace(R.id.container, produtosFragment)
}
}
}
override fun onAttachFragment(fragment: Fragment?) {
super.onAttachFragment(fragment)
when (fragment) {
is ListaProdutosFragment -> {
fragment.quandoProdutoSelecionado = { produtoSelecionado ->
val detalhesProdutoFragment: DetalhesProdutoFragment by inject()
val argumentos = Bundle()
argumentos.putLong(CHAVE_PRODUTO_ID, produtoSelecionado.id)
detalhesProdutoFragment.arguments = argumentos
transacaoFragment {
addToBackStack(null)
replace(R.id.container, detalhesProdutoFragment)
}
}
}
is DetalhesProdutoFragment -> {
fragment.quandoProdutoComprado = { produtoComprado ->
val pagamentoFragment: PagamentoFragment by inject()
val dado = Bundle()
dado.putLong(CHAVE_PRODUTO_ID, produtoComprado.id)
pagamentoFragment.arguments = dado
transacaoFragment {
addToBackStack(null)
replace(R.id.container, pagamentoFragment)
}
}
}
is PagamentoFragment -> {
fragment.quandoPagamentoRealizado = {
Toast.makeText(this, COMPRA_REALIZADA, Toast.LENGTH_LONG).show()
}
}
}
}
}
No trecho:
override fun onAttachFragment(fragment: Fragment?) {
super.onAttachFragment(fragment)
when (fragment) {
is ListaProdutosFragment -> {
fragment.quandoProdutoSelecionado = { produtoSelecionado ->
val detalhesProdutoFragment: DetalhesProdutoFragment by inject()
val argumentos = Bundle()
argumentos.putLong(CHAVE_PRODUTO_ID, produtoSelecionado.id)
detalhesProdutoFragment.arguments = argumentos
transacaoFragment {
addToBackStack(null)
replace(R.id.container, detalhesProdutoFragment)
}
}
}Eu retirei o " ? " ficando assim:
override fun onAttachFragment(fragment: Fragment) {
super.onAttachFragment(fragment)
when (fragment) {
is ListaProdutosFragment -> {
fragment.quandoProdutoSelecionado = { produtoSelecionado ->
val detalhesProdutoFragment: DetalhesProdutoFragment by inject()
val argumentos = Bundle()
argumentos.putLong(CHAVE_PRODUTO_ID, produtoSelecionado.id)
detalhesProdutoFragment.arguments = argumentos
transacaoFragment {
addToBackStack(null)
replace(R.id.container, detalhesProdutoFragment)
}
}
}procurei soluções na internet e achei essa, o codigo compilou e funcionou até o momento. Não se se acarretará em problemas futuros a retirada do " ? "
Na realidade remover o ? significa que você está falando que sempre receberá um fragment válido, se receber um null por exemplo, seu app vai quebrar dando uma null pointer exception