[Android]JavaでfindViewByIdにサヨナラするための2つの方法①(データバインディングライブラリ)

このページには広告が含まれる場合があります。

 

Androidアプリを作る際に、レイアウトファイルに貼り付けたビュー(View)をソースファイルで使うためには、Activity#findViewByIdメソッドを使って、レイアウトファイルとソースファイル間のビューの結びつけをする必要があります。

これは、ビューが少なければいいのですが、使うビューが多ければ多いほど、処理の本質ではない「findViewById」メソッドのコードがこんな感じで増えてしまって、書くのも読むのも面倒な状況になってしまいます。

     textViewLeft = (TextView) findViewById(R.id.textViewLeft);
        textViewOperator = (TextView) findViewById(R.id.textViewOperator);
        textViewRight = (TextView) findViewById(R.id.textViewRight);
        textViewMessage = (TextView) findViewById(R.id.textViewMessage);
        buttonAnswerCheck = (Button) findViewById(R.id.buttonAnswerCheck);
        imageView = (ImageView) findViewById(R.id.imageView);
        textViewRemaining = (TextView) findViewById(R.id.textViewRemaining);
        textViewCorrect = (TextView) findViewById(R.id.textViewCorrect);
        textViewPoint = (TextView) findViewById(R.id.textViewPoint);
        buttonBack = (Button) findViewById(R.id.buttonBack);

 

Javaの後継言語のKotlinであれば、「findViewById」にサヨナラするためのプラグインである「Kotlin Android Extensions」がAndroid Studioに標準で搭載されているので、何も考えること無く「findViewById」にサヨナラできるのですが、Javaの場合は残念ながら、標準ではそのような機能は備わっておわず、「どうしたもんかいな」という状況にあります。

この「どうしたもんかいな」をどうにかするための「データバインディングライブラリ」の最も簡単な使い方について、お伝えします。

(アノテーション処理などの詳しい説明は抜きで、とりあえずやり方だけ説明していますのでご了承下さい)

 

「データバインディングライブラリ」とは

Google先生の本家本元公式リファレンスによると、「データバインディングライブラリ」とは、

宣言的なレイアウトを作成し、アプリケーション ロジックとレイアウトをバインドするのに必要なコードを最小限に抑えるため

のライブラリなんだそうです。

このGoogle先生のサイトには、使い方も載っているのですが、ややわかりづらいので、以下のサイトを参考にさせて頂きました。

 

1.アプリケーションレベルのbuild.gradleで、データバインディングライブラリを使えるように設定

アプリケーションレベル(モジュールレベル)の「build.gradle」の「android」タグ内で、以下のように記述します。

android {
    
 (他に色々書いてある) 

    dataBinding {
        enabled true
    }
}

 

2.レイアウトファイルのルートを「layout」タグで囲む

レイアウトファイルの「Design」ビューではなく、xmlのコードが書いてある「Text」タグの方から、レイアウトのルートを「layout」タグで括ってあげます。

こんな感じになっているのを

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:app="https://schemas.android.com/apk/res-auto"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="net.minpro.calculationtraining.MenuActivity">

    <TextView
        android:id="@+id/textView"
        
  (他に色々書いてある)  

</android.support.constraint.ConstraintLayout>

 

こんな感じにしてあげる

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="https://schemas.android.com/apk/res/android" ← ルートを「layout」に
    xmlns:app="https://schemas.android.com/apk/res-auto"
    xmlns:tools="https://schemas.android.com/tools">

    <android.support.constraint.ConstraintLayout ← 元々のルートのレイアウトを一段下にする
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="net.minpro.calculationtraining.MainActivity"
        tools:layout_editor_absoluteY="73dp"
        tools:layout_editor_absoluteX="0dp">

        <TextView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            
   (他に色々書いてある)

    </android.support.constraint.ConstraintLayout>
</layout>

 

3.一旦ビルドする

この段階で一旦ビルドしてあげると、「app => build => generated」フォルダ内に「dataBinding」フォルダが作られます(これがないと次に進んでもビューをバインドしてくれない)。

blank

 

 

4.結びつけたいソースファイルに「バインドさせるためのインスタンス」を設定

レイアウトファイルと結びつけたいソースファイル(Javaファイル)で、ビューをバインドするためのコードを以下のように書く。

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.activity_main); ← これを


        ActivityMainBinding binding 
     = DataBindingUtil.setContentView(this, R.layout.activity_main); //←これに置き換える

       (他に色々書いてある)

}

ここで使っている「ActivityMainBinding」というクラスは、3のビルドで自動的に作られたクラスで、レイアウトファイルの名称に応じてクラスの名前が変わります。

上の例では、レイアウトファイルの名前が「activity_main.xml」なので、「ActivityMainBinding」となりました。

 

5.「バインドさせるためのインスタンス」を経由してビューにアクセスできるようになる

以上でやることはおわりで、ビューのアクセスしたい場合は、4で設定した「バインドさせるためのインスタンス」を経由してアクセスすることが出来ます。

こんな感じで

blank

 

レイアウトファイルのxmlのコードを直接いじらないといけない部分はありますが、Javaで「findViewById」とサヨナラしたい場合は、中々使えるのではないかと思います。

(下の動画で詳しく解説していますので、よろしければご覧ください)

(注)以下のフォームより当社公式メールマガジンにご登録頂くことで
約6時間のFlutter動画講座が無料で受講できます!

(メールマガジンは登録無料・いつでも解除可)

[体験版]
ゼロからのFlutter
(Flutter初級編) 

 

【体験版講座に含まれるもの】
・約70本・約6時間の動画テキスト
・1つの課題アプリのソースコード
・Flutterアプリを作るための「環境構築ライブサポート(Google Meet)」
(「体験版」は全30時間超の「製品版」の約1/6を抜粋した講座です。「製品版」の詳細はこちらから)

 

【当社公式メルマガご登録6大特典】
blank

\約6時間動画講座を無料プレゼント!/
今すぐ無料体験版に申し込む ▶
無料メルマガ登録で講座割引クーポンなど6大特典ゲット!

こんな記事も読まれています

今すぐプレゼントを受け取る(約6時間のFlutter初級編体験版動画講座を無料でプレゼント)
blank

はじめての方へ

blank
みんプロ式プログラミング講座体系・ラインナップ
みんプロ式プログラミング講座受講の流れ(割引特典利用方法)
サイトマップ(みんプロHPコンテンツ一覧)
運営会社概要

みんプロ作成アプリ

blank
blank
blank
blank
blank

みんプロ式動画講座(コア・Flutter)

ゼロからのFlutter(初級編)-はじめてのプログラミングからアプリリリースまで-
Flutter中級編1-Web通信・設計・状態管理・DIの基礎-
Flutter中級編2-Firebase/地図・カメラ連携等の基礎-
Flutter中級編3-広告/アプリ内課金等の基礎-
Flutter中級編4-Webアプリとレスポンシブデザインの基礎-

みんプロ式動画講座(サテライト)

Flutter/Dartトラブルシューティング・小ネタ集(コア初級編受講で無料プレゼント)
ゼロからのGit・GitHub(コマンドラインツールを極力使わないバージョン管理入門)
Flutter/Dartにおける設計・状態管理・DIの解説集
Dart逆引き大辞典
Flutterにおけるテストの基礎
blank
blank

今すぐプレゼントを受け取る(約6時間のFlutter初級編体験版動画講座を無料でプレゼント)
TOP