Jak*_*ton 3 android android-context android-fragments kotlin
在我的应用程序中,我想在显示时显示消息fragment。
我用viewPager和BottomNavBar用于表演4fragments!
我希望在单击BottomNavBar项目时显示fragment,我希望在可见性 fragment 显示消息时显示。
我写下面的代码:
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() }
}
}
}
Run Code Online (Sandbox Code Playgroud)
在我上面的代码中,当单击 my BottomNavBarfor show 时fragment,向我显示 Log 消息但不显示Toast消息。
当单击另一个BottomNavBar项目并再次单击前一个BottomNavBar项目时,然后显示Toast消息。
我认为第一次没有 context在setUserVisibleHint方法中初始化。
我如何每次都初始化context以显示Toast?
Moh*_*uri 15
我用以下代码更改了您的代码:
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)
}
}
}
Run Code Online (Sandbox Code Playgroud)
首先你应该使用requireContext()而不是context()为了避免内存泄漏。
为了每次都显示 Toast,您可以在 中初始化处理程序setUserVisibleHint,然后在一些延迟后运行您的代码!
我希望能帮助你
小智 7
在变量中存储上下文是一种可怕的做法,大多数时候会导致内存泄漏,请使用requireContext()该方法是在支持库 27.1.0 中引入的。现在,您很可能会拥有更新的版本,甚至使用androidx,因此没有理由存储上下文
| 归档时间: |
|
| 查看次数: |
16683 次 |
| 最近记录: |