Как изменить изображение в активности из фрагмента в Котлине - PullRequest
0 голосов
/ 21 сентября 2019

В приложении для Android у меня есть активность с несколькими фрагментами.В одном из этих фрагментов у меня есть ImageButton.При нажатии я хочу, чтобы что-то происходило непосредственно в активности, а не во фрагменте.В этом случае я хочу установить изображение.Подводя итог, ImageButton находится во фрагменте, но ImageView, который я хочу изменить при нажатии, находится в действии.

Как мне этого добиться?Все, что я пробовал, приводило к сбою приложения.

Вот как выглядит мой фрагмент.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)
    }
}
}

1 Ответ

2 голосов
/ 21 сентября 2019
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, может быть не идеально

...