首页 > 解决方案 > 如何从 Kotlin 中的片段更改活动中的图像

问题描述

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

我该如何做到这一点?无论我尝试过什么都会导致应用程序崩溃。

这就是我的 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)
    }
}
}

标签: androidandroid-fragmentskotlinandroid-activityandroid-button

解决方案


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)
    }
}

在您的活动中:

// 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)
}

只是在stackoverflow中编码,可能并不完美


推荐阅读