如何从 Kotlin 中的片段更改 activity 中的图像

How to change image in activity from fragment in Kotlin

在一个 android 应用程序中,我有一个包含多个片段的 activity。在其中一个片段中,我有一个 ImageButton。单击时,我想让 activity 直接发生某些事情,而不是在片段中发生。在这种情况下,我想设置一个图像。总而言之,ImageButton 在片段中,但我想在点击时更改的 ImageView 在 activity 中。

如何实现?无论我尝试过什么,都会导致应用程序崩溃。

这是我的 fragment.kt 的样子:

class Fragment1 : Fragment() {

companion object{
    fun newInstance() = Fragment1()
}

override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    return inflater.inflate(R.layout.fragment_1, container, false)
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)

    imageButton.setOnClickListener{
        imageView.setImageResource(R.drawable.example)
    }
}
}
class Fragment1 : Fragment() {

var callbacks: OnFragmentCallbacks? = null

override fun onAttach(context: Context?) {
    super.onAttach(context)
    callbacks = activity as OnFragmentCallbacks
}

interface OnFragmentCallbacks{
    fun changeImage(resourceId: Int)
}

companion object{
    fun newInstance() = Fragment1()
}

override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    return inflater.inflate(R.layout.fragment_1, container, false)
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)

    imageButton.setOnClickListener{
        callbacks?.changeImage(R.drawable.example)
    }
}

在你的Activity中:

// Change FragmentName with name of your Fragment class
class MainActivity : AppCompatActivity(), FragmentName.OnFragmentCallbacks{

override fun changeImage(resouseId: Int){
    imageView.setImageDrawable(getResources().getDrawable(resourceId))
    // or
    imageView.setImageResource(resourceId)
}

刚刚在Whosebug中编码,可能并不完美