在我的应用程序中,我想在fragment
显示时显示消息。
我使用了viewPager
和BottomNavBar
来显示4 fragments
!
我希望在单击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() }
}
}
}
在我上面的代码中,当点击我的BottomNavBar
显示fragment
时,显示日志消息,但不显示吐司消息。
当单击另一个BottomNavBar
项目并再次单击上一个BottomNavBar
项目时,则显示Toast消息。
我认为在第一次没有在setUserVisibleHint
方法中初始化context
。
我如何在每次都初始化context
以显示吐司?
4条答案
按热度按时间yr9zkbsy1#
我用以下代码更改了您的代码:
首先,您应该使用**
requireContext()
,而不是context()
**,以避免内存泄漏。对于show吐司for every time,您可以在
setUserVisibleHint
中初始化处理程序,然后在一些延迟之后运行您的代码!我希望能帮到你
ijxebb2r2#
在变量中存储上下文是一种可怕的做法,而且大多数情况下会导致内存泄漏,请使用requireContext()此方法是在支持库27.1.0中引入的。现在,您很可能会有一个更新的版本,甚至使用androidx,因此没有理由存储上下文
3df52oht3#
如果 您 正在 寻找 应用 程序 上下文 来 显示 toast 消息 , 请 尝试 以下 方法 , 看看 它 是否 有效 。 另外 , 初始 化 onCreate 方法 , 以便 在 此时 获得 Activity 上下文 。
中 的 每 一 个
myss37ts4#
我在这里也遇到了类似的问题。我有一个带有多个片段的Activity,我需要一个ListView来显示一些雇员。但是当我调用Adapter类时,我不知道如何传递上下文变量:
在一般的例子中,它在活动中工作。如果不可能,我将创建一个活动并将其放在其中。