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
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