Quando eu clico na notícia o app quebra. Mas apenas no modo landscape
meu código
package br.com.souza.xavier.fernando.technews.ui.activity
import android.content.Intent
import android.content.res.Configuration
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.FragmentOnAttachListener
import br.com.souza.xavier.fernando.technews.R
import br.com.souza.xavier.fernando.technews.model.Noticia
import br.com.souza.xavier.fernando.technews.ui.activity.extensions.transacaoFragment
import br.com.souza.xavier.fernando.technews.ui.fragment.ListaNoticiasFragment
import br.com.souza.xavier.fernando.technews.ui.fragment.VisualizaNoticiasFragment
private const val TAG_FRAGMENT_VISUALIZA_NOTICIA = "visualizaNoticia"
class NoticiasActivity : AppCompatActivity() {
init {
val fm = supportFragmentManager
val listener = FragmentOnAttachListener { _, fragment ->
when (fragment) {
is ListaNoticiasFragment -> {
configuraListaNoticias(fragment)
}
is VisualizaNoticiasFragment -> {
configuraVisualizaNoticia(fragment)
}
}
}
fm.addFragmentOnAttachListener(listener)
}
private fun configuraVisualizaNoticia(fragment: VisualizaNoticiasFragment) {
fragment.quandoFinalizaTela = this::finish
fragment.quandoSelecionaMenuEdicao = this::abreFormularioEdicao
}
private fun configuraListaNoticias(fragment: ListaNoticiasFragment) {
fragment.quandoNoticiaSeleciona = this::abreVisualizadorNoticia
fragment.quandoFabSalvaNoticiaClicado = this::abreFormularioModoCriacao
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_noticias)
if (savedInstanceState == null) {
abreListaNoticias()
} else {
supportFragmentManager
.findFragmentByTag(TAG_FRAGMENT_VISUALIZA_NOTICIA)?.let { fragment ->
val argumentos = fragment.arguments
val novoFragment = VisualizaNoticiasFragment()
novoFragment.arguments = argumentos
transacaoFragment {
remove(fragment)
}
supportFragmentManager.popBackStack()
transacaoFragment {
val container =
if (resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) {
R.id.activity_noticias_container_secundario
} else {
addToBackStack(null)
R.id.activity_noticias_container_primario
}
replace(container, novoFragment, TAG_FRAGMENT_VISUALIZA_NOTICIA)
}
}
}
}
private fun abreListaNoticias() {
transacaoFragment {
replace(R.id.activity_noticias_container_primario, ListaNoticiasFragment())
}
}
private fun abreFormularioModoCriacao() {
val intent = Intent(this, FormularioNoticiaActivity::class.java)
startActivity(intent)
}
private fun abreVisualizadorNoticia(noticia: Noticia) {
val fragment = VisualizaNoticiasFragment()
val dados = Bundle()
dados.putLong(NOTICIA_ID_CHAVE, noticia.id)
fragment.arguments = dados
transacaoFragment {
val container = if (resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) {
R.id.activity_noticias_container_secundario
} else {
addToBackStack(null)
R.id.activity_noticias_container_primario
}
replace(container, fragment, TAG_FRAGMENT_VISUALIZA_NOTICIA)
}
}
private fun abreFormularioEdicao(noticia: Noticia) {
val intent = Intent(this, FormularioNoticiaActivity::class.java)
intent.putExtra(NOTICIA_ID_CHAVE, noticia.id)
startActivity(intent)
}
}
Existem alguma diferenças em razão de funções depreciadas como por exemplo o bloco "init" que substitui a sobrescrita da função onAttachFragment Fora isso é tudo igual ao do professor. Contudo quando entrei nessa aula o click sobre a alteração da notícia parou de funcionar
Segue Logcat no comentário abaixo ( não coube aqui )
uma leitura por cima parece que o notíciaId não está funcionando na função putLong ... ou seja... o Id se perde