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