Sto utilizzando Kotlin Android extensions nel mio progetto e ho trovato un comportamento che non riesco a capire. Io uso questo codice per mantenere il mio frammento nell'attività:Estensioni Kotlin Android e frammento trattenuto
val fragment = fragmentManager.findFragmentByTag("hello") ?: HelloFragment()
fragmentManager.beginTransaction()
.replace(R.id.fragment_container, fragment, "hello")
.commit()
Questa è la mantenuta Fragment
:
import kotlinx.android.synthetic.hello.*
public class HelloFragment : Fragment() {
val text = "Hello world!"
override fun onCreate(savedInstanceState: Bundle?) {
super<Fragment>.onCreate(savedInstanceState)
setRetainInstance(true)
}
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater?.inflate(R.layout.hello, container, false)
}
override fun onViewCreated(view: View?, savedInstanceState: Bundle?) {
super<Fragment>.onViewCreated(view, savedInstanceState)
text_view.setText(text) // <- does not work when retained
}
}
e il suo layout XML hello.xml:
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/text_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center" />
Tutto funziona come previsto: i display text_view.setText()
Ciao mondo! sullo schermo al primo avvio. Ma quando si ruota lo schermo, lo text_view.setText()
non funziona. Questo è strano perché text_view
non è annullabile e deve refferare in qualche vista. Se si rimuove setRetainInstance(true)
e si lascia il frammento ricreato ogni volta che questo problema scompare. Qualche idea su cosa potrebbe causare questo problema?
Grazie per la risposta, funziona. – Lamorak
Il problema è stato risolto ora. vedere la risposta di @greenspand sotto – activedecay