LoginSignup
0
0

More than 1 year has passed since last update.

Android View Bindingを組み込む

Posted at

はじめに

学習記録
View Bindingを使用してビューを直接参照する

View Bindingを導入

build.gradle(Module: ~)のandroid {・・・}内に以下を追加

build.gradle
    viewBinding {
        enabled = true
    }

レイアウトとActivity

activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/main_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/main_button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Button"
        app:layout_constraintTop_toBottomOf="@+id/main_text"/>

</androidx.constraintlayout.widget.ConstraintLayout>
MainActivity
package com.example.sampleapp

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.example.sampleapp.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {
    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        val message = binding.mainText
        message.text = "This is sample."

        val button = binding.mainButton
        button.setOnClickListener {
            message.text = "clicked"
        }
    }
}

初期表示↓

ボタンクリック後の表示↓

ポイント

MainActivity
private lateinit var binding: ActivityMainBinding

・バインディングクラスのインスタンスを保管するための変数
・バインディングクラスのクラス名は「レイアウトファイル名をキャメル記法にしたもの」+「Binding」(今回の場合、レイアウトファイル名が「activity_main.xml」なので、クラス名は「ActivityMainBinding」となる)

MainActivity
binding = ActivityMainBinding.inflate(layoutInflater)

・activity_main.xmlを直接参照するインスタンスを生成

MainActivity
        val message = binding.mainText
        message.text = "This is sample."

        val button = binding.mainButton
        button.setOnClickListener {
            message.text = "clicked"
        }

後はプロパティを参照するだけです。

おわりに

以前Webの開発をしていたのでJavaScriptやjQueryみたいだなと思い、ここに関しては実際Androidの開発業務で初めてソースコード見た時でもすんなり入れたと思います。
もっとスラスラ記事書けるようになりたいですね。。。
ありがとうございました。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0