KOTLIN 不是 Java!如何在片段中使用 maketoast(或使点击在片段中起作用)
KOTLIN not Java! How to use maketoast within a fragment (or make a click work in a fragment)
您好,我在片段中进行点击时遇到了问题。 (例如 Toast、按钮或与点击相关的任何内容)
例如,我试图在下面的代码中实现 Toast.makeText。
xml 此代码中提到的文件是一个图片库,我希望我的应用程序为每张图片显示 toast 以显示图片的内容。
我一直在尝试许多不同的事情,并且一直在搜索 10 个小时,但似乎没有任何效果。另外,与此问题相关的大多数来源仅供 Java 使用。非常感谢任何帮助或建议。
class GalleryFragment : Fragment(), View.OnClickListener {
var myButton: ImageView? = null
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
val myView: View = inflater.inflate(R.layout.fragment_gallery, container, false)
myButton = myView.findViewById<View>(R.id.image1) as ImageView
myButton!!.setOnClickListener(this)
return myView
}
override fun onClick(v: View) {
Toast.makeText(activity?.applicationContext, "Beach", Toast.LENGTH_SHORT).show()
}
}
这就是我从片段生成 Toast 的方式(使用 requireActivity() 或 requireContext())。您可能还想将监听器的附加移动到 onViewCreated():
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
myButton = myView.findViewById<View>(R.id.image1) as ImageView
myButton!!.setOnClickListener(this)
}
override fun onClick(v: View) {
//here is the change
Toast.makeText(requireActivity(), "Beach", Toast.LENGTH_SHORT).show()
}
您还可以创建一个扩展函数:
fun Context.shortToast(toastMessage: String){
Toast.makeText(this, toastMessage, Toast.LENGTH_SHORT ).show()
}
//call this in the fragment
requireContext().shortToast("Here is my toast message")
如果 onClick 你检查了它并且它被触发,改变它说的地方: activity?.applicationContext
和 v.context
并告诉我它是否有效。也许你的上下文不对。
您的代码看起来没问题。
请检查您希望点击显示敬酒的图片是否太小以至于无法点击。也许您的图像视图大小为 16dp 甚至更小。或者您可能已将 android:clickable
设置为 false
。
如果能加上布局文件,就更容易找到问题了。
上下文不应为可空类型。报错说明是类型不匹配。
Toast.makeText(context, "saving", Toast.LENGTH_SHORT).show()
!! (非空断言运算符)用于表示变量不为空。
使用 let 和 safe 调用
context?.let{ context->
Toast.makeText(context, "saving", Toast.LENGTH_SHORT).show()
}
您好,我在片段中进行点击时遇到了问题。 (例如 Toast、按钮或与点击相关的任何内容)
例如,我试图在下面的代码中实现 Toast.makeText。 xml 此代码中提到的文件是一个图片库,我希望我的应用程序为每张图片显示 toast 以显示图片的内容。
我一直在尝试许多不同的事情,并且一直在搜索 10 个小时,但似乎没有任何效果。另外,与此问题相关的大多数来源仅供 Java 使用。非常感谢任何帮助或建议。
class GalleryFragment : Fragment(), View.OnClickListener {
var myButton: ImageView? = null
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
val myView: View = inflater.inflate(R.layout.fragment_gallery, container, false)
myButton = myView.findViewById<View>(R.id.image1) as ImageView
myButton!!.setOnClickListener(this)
return myView
}
override fun onClick(v: View) {
Toast.makeText(activity?.applicationContext, "Beach", Toast.LENGTH_SHORT).show()
}
}
这就是我从片段生成 Toast 的方式(使用 requireActivity() 或 requireContext())。您可能还想将监听器的附加移动到 onViewCreated():
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
myButton = myView.findViewById<View>(R.id.image1) as ImageView
myButton!!.setOnClickListener(this)
}
override fun onClick(v: View) {
//here is the change
Toast.makeText(requireActivity(), "Beach", Toast.LENGTH_SHORT).show()
}
您还可以创建一个扩展函数:
fun Context.shortToast(toastMessage: String){
Toast.makeText(this, toastMessage, Toast.LENGTH_SHORT ).show()
}
//call this in the fragment
requireContext().shortToast("Here is my toast message")
如果 onClick 你检查了它并且它被触发,改变它说的地方: activity?.applicationContext
和 v.context
并告诉我它是否有效。也许你的上下文不对。
您的代码看起来没问题。
请检查您希望点击显示敬酒的图片是否太小以至于无法点击。也许您的图像视图大小为 16dp 甚至更小。或者您可能已将 android:clickable
设置为 false
。
如果能加上布局文件,就更容易找到问题了。
上下文不应为可空类型。报错说明是类型不匹配。
Toast.makeText(context, "saving", Toast.LENGTH_SHORT).show()
!! (非空断言运算符)用于表示变量不为空。 使用 let 和 safe 调用
context?.let{ context->
Toast.makeText(context, "saving", Toast.LENGTH_SHORT).show()
}