Segui o mesmo passo a passo das aulas, consigui adicionar os 2 placeholders e fazer a configuração deles normalmente. Porém quando fui executar o app, o mesmo quebra em tempo de execução. Código abaixo do nav_graph.xml
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/nav_graph"
app:startDestination="@id/listaProdutos">
<fragment
tools:layout="@layout/lista_produtos"
android:id="@+id/listaProdutos"
android:name="br.com.alura.aluraesporte.ui.fragment.ListaProdutosFragment"
android:label="Lista de produtos" />
<fragment
tools:layout="@layout/detalhes_produto"
android:id="@+id/detalhesProduto"
android:name="br.com.alura.aluraesporte.ui.fragment.DetalhesProdutoFragment"
android:label="Detalhes do produto"
/>
</navigation>
código xml da activity do projeto (que irá hospedar vários fragments)
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment
android:id="@+id/produtos_activity_nav_host"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="androidx.navigation.fragment.NavHostFragment"
app:navGraph="@navigation/nav_graph"
app:defaultNavHost="true"/>
</FrameLayout>
código kotlin da activity principal
package br.com.alura.aluraesporte.ui.activity
import android.os.Bundle
import android.widget.Toast
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()
}
}
}
}
}