Dans mon application, je veux afficher le message lorsque Dans mes codes ci-dessus, quand cliquez sur mon Je pense que la première fois, ne pas initialiser le Comment puis-je initialiser fragment
l'affiche.
J'ai utilisé viewPager
et BottomNavBar
pour afficher 4 fragments
!
Je veux lorsque je clique sur les éléments BottomNavBar
afficher fragment
et je veux quand visibilité fragment
afficher le message fort>.
J'écris les codes ci-dessous: class HomeRegisteredFragment : Fragment() {
lateinit var toolbarTile: TextView
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_home_registered, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
//Initialize
activity?.let {
toolbarTile = it.findViewById(R.id.homePage_toolbarTitle)
}
//Set title
toolbarTile.text = resources.getString(R.string.registered)
context?.let { ContextCompat.getColor(it, R.color.blue_active) }?.let {
toolbarTile.setTextColor(it)
}
}
override fun setUserVisibleHint(isVisibleToUser: Boolean) {
super.setUserVisibleHint(isVisibleToUser)
if (isVisibleToUser) {
Log.e("showFragLog", "Show")
context?.let { Toast.makeText(it, "Show", Toast.LENGTH_SHORT).show() }
}
}
}
BottomNavBar
pour afficher le fragment
, montrez-moi le message du journal mais pas afficher le message Toast .
Lorsque vous cliquez sur un autre élément BottomNavBar
et cliquez à nouveau sur l'élément BottomNavBar
précédent, puis affichez le message Toast .
contexte
dans la méthode setUserVisibleHint
.
contexte
pour afficher Toast à chaque fois?
3 Réponses :
Si vous recherchez un contexte d'application pour afficher le message toast, essayez la méthode ci-dessous et voyez si cela fonctionne. En outre, initialisez-la méthode onCreate afin d'avoir le contexte d'activité à ce stade.
val appContext = context !!. applicationContext
Le stockage du contexte dans une variable est une pratique horrible et la plupart du temps conduit à des fuites de mémoire, utilisez requireContext () cette méthode a été introduite dans la bibliothèque de support 27.1.0. De nos jours, vous aurez très probablement une version plus récente ou même utilisant androidx , il n'y a donc aucune excuse pour stocker un contexte
J'ai changé vos codes avec les codes ci-dessous:
class HomeRegisteredFragment : Fragment() { lateinit var toolbarTile: TextView lateinit var handler: Handler override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { return inflater.inflate(R.layout.fragment_home_registered, container, false) } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) //Initialize activity?.let { toolbarTile = it.findViewById(R.id.homePage_toolbarTitle) } } override fun setUserVisibleHint(isVisibleToUser: Boolean) { super.setUserVisibleHint(isVisibleToUser) if (isVisibleToUser) { //Initialize handler = Handler() //Set delay handler.postDelayed({ Toast.makeText(requireContext(),"Show",Toast.LENGTH_SHORT).show() }, 10) } } }
Vous devez d'abord utiliser requireContext()
au lieu de context ()
pour éviter les fuites de mémoire.
Pour afficher Toast à chaque fois, vous pouvez initialiser le gestionnaire dans setUserVisibleHint
, puis après un certain délai, exécutez votre code!
J'espère vous aider
Ce code m'a aidé en ce que j'ai pu voir que j'avais besoin de mettre mon code dans le sur créé
@TonyMerritt, vous pouvez utiliser la méthode onCreateView