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.
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()
}
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
maybe your layout is include label with id, this id override origin id.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With