OnClickListener not fired on ConstraintLayout

12,731

Solution 1

Remove

android:clickable="false"

From Docs

Defines whether this view reacts to click events

and move keyboard_touch_1.setOnClickListener {...} at the end of onResume because DataBindingUtil.setContentView will reset the previously set layout (setContentView) therefore you have a new layout with new views.

Note : you are using data-binding along with normal initialization setContentView(R.layout.activity_game) technique so the optimal way would be to use

Event Handling via data binding

Solution 2

As I cannot comment due to my low rep I will have to post an answer.

Based on the code you have provided via your GitHub link you are actually trying to set the content view twice.

Firstly you are calling setContentView(R.layout.activity_game) within your onCreate() method and then DataBindingUtil.setContentView(this, R.layout.activity_game) within your onResume() method.

Please try deleting setContentView(R.layout.activity_game) and then move your data binding setup code to your onCreate method(). You can then access your constraint layout view via your "binding" object as a property.

For example:

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        viewModel = GameViewModel()
        val binding: ActivityGameBinding = DataBindingUtil.setContentView(this, R.layout.activity_game)
        binding.viewModel = viewModel

        binding.keyboardTouch1.setOnClickListener {
            Toast.makeText(this, "IT WORKS !!!", Toast.LENGTH_SHORT).show()
        }
    }

    override fun onResume() {
        super.onResume()
        viewModel.startUpdate()
    }

    override fun onPause() {
        super.onPause()
        viewModel.stopUpdate()
    }
Share:
12,731

Related videos on Youtube

Valentin Michalak
Author by

Valentin Michalak

I made lot of things. I ❤︎ Kotlin.

Updated on September 14, 2022

Comments

  • Valentin Michalak
    Valentin Michalak over 1 year

    On my android app project i have to make a button with a ProgressBar on background and two TextView.

    I make a first attempt like this:

        <android.support.constraint.ConstraintLayout
            android:id="@+id/keyboard_touch_1"
            android:layout_width="60dp"
            android:layout_height="85dp"
            android:layout_marginBottom="150dp"
            android:layout_marginStart="10dp"
            android:focusable="true"
            android:clickable="true"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintStart_toStartOf="parent">
    
            <ProgressBar
                android:id="@+id/keyboard_touch_1_progress_bar"
                style="@android:style/Widget.ProgressBar.Horizontal"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:indeterminate="false"
                android:max="100"
                android:progress="50"
                android:progressDrawable="@drawable/button_progress_bar_default"
                android:clickable="false"
                android:focusable="false" />
    
            <TextView
                android:id="@+id/keyboard_touch_1_score"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentStart="true"
                android:layout_marginEnd="8dp"
                android:layout_marginTop="8dp"
                android:text="2"
                android:textColor="@color/colorAccent"
                android:textSize="11dp"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintTop_toTopOf="parent"
                tools:text="3"
                android:clickable="false"
                android:focusable="false" />
    
            <TextView
                android:id="@+id/keyboard_touch_1_letter"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentStart="true"
                android:layout_marginTop="13dp"
                android:text="A"
                android:textColor="@color/colorAccent"
                android:textSize="45dp"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent"
                android:clickable="false"
                android:focusable="false" />
    
        </android.support.constraint.ConstraintLayout>
    

    It looks good but when i attempt to add an OnClickListener it doesn't work correctly.

    keyboard_touch_1.setOnClickListener {
        Toast.makeText(this, "IT WORKS !!!", Toast.LENGTH_SHORT).show()
    }
    

    The OnClickListener is not fired and i have no idea of why. It's probably very simple but i doesn't understand why.

    Thanks in advance.