私のAndroidアプリプロジェクトでは、背景にプログレスバーと2つのTextViewを備えたボタンを作成する必要があります。
私はこのような最初の試みをします:
<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>
見た目は良さそうですが、OnClickListenerを追加しようとすると、正しく機能しません。
keyboard_touch_1.setOnClickListener {
Toast.makeText(this, "IT WORKS !!!", Toast.LENGTH_SHORT).show()
}
OnClickListenerは起動されず、理由がわかりません。おそらくとても簡単ですが、理由がわかりません。
前もって感謝します。
削除する
_Android:clickable="false"
_
このビューがクリックイベントに反応するかどうかを定義します
_keyboard_touch_1.setOnClickListener {...}
_ は以前に設定されたレイアウト(onResume
)をリセットするため、setContentView
の最後に_DataBindingUtil.setContentView
_を移動します。したがって、新しいレイアウトが作成されます。新しいビューで。
注:通常の初期化setContentView(R.layout.activity_game)
手法とともにデータバインディングを使用しているため、最適な方法は
担当者が少ないためコメントできないので、回答を投稿する必要があります。
GitHubリンクを介して提供したコードに基づいて、実際にはコンテンツビューを2回設定しようとしています。
まず、onCreate()メソッド内でsetContentView(R.layout.activity_game)
を呼び出し、次にonResume()メソッド内でDataBindingUtil.setContentView(this, R.layout.activity_game)
を呼び出します。
setContentView(R.layout.activity_game)
を削除してから、データバインディングセットアップコードをonCreate method()に移動してみてください。次に、プロパティとして「バインディング」オブジェクトを介して制約レイアウトビューにアクセスできます。
例えば:
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()
}