ImageButton, как и ToggleButton и CheckBox, не запоминают состояния

Я создал несколько кнопок, которые вызывают мой фрагмент внутри контейнера, и мне нужно, чтобы он был заменен другим изображением, когда я нажимаю на кнопку. Но состояние не сохраняется, и после щелчка возвращается исходное изображение. Я пробовал использовать Селектор, разные методы. Есть предположение, что это конфликт с чем-то.

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

    var flag = true
    
    init()
    //Кнопка "Открытые"
    binding.imButtonOpened.setOnClickListener {
        buttonsListenerOpen()
    }
    //Кнопка "Завершённые"
    binding.imButtonCompleted.setOnClickListener {
        buttonsListenerComplete()
    }
    //Кнопка "Статистика"
    binding.imButtonStatistics.setOnClickListener {
        buttonsListenerStatistics()
    }
    //Кнопка "Архив"
    binding.imButtonArchive.setOnClickListener {
        buttonsListenerArchive()
    }
    **//Кнопка Мои торги c изменением цвета по клику.
    binding.imButtonMybidding.setOnClickListener {
        if (flag)
            //ставим новую картинку
            binding.imButtonMybidding.setImageResource(R.drawable.top_buttons_mbidding_active)
        else
            // возвращаем первую картинку
            binding.imButtonMybidding.setImageResource(R.drawable.top_buttons_mbidding_active)
        flag = !flag
        buttonsListenerBidding()
    }**
}

Возможно, вся проблема заключается в методе buttonsListenerBidding(), когда я комментирую его, кнопка работает нормально. Но контейнер, куда помещается фрагмент, не перекрывает кнопки и как оказалось это только с одной кнопкой - другие так себя в этом же layout не ведут, хоть с них и сбрасывается текущее состояние при нажатии на кнопку, которую обсуждаем:

private fun buttonsListenerBidding(){
    val manager = childFragmentManager
    val transaction = manager.beginTransaction()
    transaction.add((R.id.fragment_bidding_id),FragmentBidding())
    transaction.commit()
}

Возможно, я неправильно оформлю - это мой первый раз. Вот эти XML кнопки:

 <HorizontalScrollView
    android:id="@+id/horizontalScrollView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"

    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    tools:ignore="SpeakableTextPresentCheck">

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="70dp"
        android:orientation="horizontal">

        <ImageButton
            android:id="@+id/im_button_mybidding"
            android:layout_width="70dp"
            android:layout_height="70dp"
            android:clickable="true"
            android:layout_marginStart="@dimen/size_10_dp"
            android:adjustViewBounds="true"
           android:background="@drawable/top_buttons_mbidding_not_active"
            android:focusable="true" />

Когда нажимаю - изображение на мгновение меняется, но затем возвращается старое. Пожалуйста, помогите, я работаю над этим уже четыре дня!


Ответы (1 шт):

Автор решения: Павел Борисов

Нашлась проблема - она в недоразработчике(кто бы мог подумать!). Чтобы не было рекурсии внутри constraintLayout, куда помещаются все фрагменты других классов, метод первой кнопки помещает свой фрагмент в корневой constraintLayout и от этого кажется, будто кнопка не сохраняет своё свойство, а на самом деле просто фрагмент создается поверх старого. Спасибо @woess за то, что ткнул носом - всё было на поверхности.

→ Ссылка