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?.applicationContextv.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()
        }