LoginSignup
1
2

More than 5 years have passed since last update.

AndroidでSceneとDataBindingを一緒に使う

Posted at

こんにちは。仕事でAndroidプログラムをやってるものです。
きょうは、最近仕事でやったことについて、知見を共有したいと思います。
ソースだけ見たい方は以下のリポジトリへどうぞ。(この記事もほとんどソースですが…)
サンプルソース

テスト環境

macOS High Sierra
Android Studio 3.0.1

ベース画面作成

レイアウトファイルを作成します。Sceneを設定したいViewGroupにIDを振っておきましょう。

activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/scene_root"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

</FrameLayout>

Scene用のレイアウト生成

レイアウトファイルを作成します。データなどは適当に設定してます。

scene_a.xml
<layout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <data>
        <variable
            name="description"
            type="String"/>
        <variable
            name="buttonText"
            type="String"/>
        <variable
            name="onClickListener"
            type="android.view.View.OnClickListener"/>
    </data>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:gravity="center">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="20sp"
            android:text="シーンA"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="16sp"
            android:text="@{description}"
            tools:text="説明"/>

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{buttonText}"
            android:onClick="@{onClickListener}"/>

    </LinearLayout>

</layout>

SceneとDataBindingの連携

Bindingから作成したレイアウトとSceneを連携させます。

MainActivity.java
public class MainActivity extends AppCompatActivity {

    private Scene sceneA;
    private Scene sceneB;
    private Scene sceneC;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        LayoutInflater inflater = LayoutInflater.from(this);
        ViewGroup sceneRoot = findViewById(R.id.scene_root);
        sceneA = createSceneA(inflater, sceneRoot);
        // sceneB・Cも同様に

        // 最初のシーンAへ
        TransitionManager.go(sceneA);
    }

    private Scene createSceneA(LayoutInflater inflater, ViewGroup sceneRoot) {
        SceneABinding binding = SceneABinding.inflate(inflater, sceneRoot, false);
        binding.setDescription("これはシーンAです。");
        binding.setButtonText("シーンBに行こうね");
        binding.setOnClickListener(view -> TransitionManager.go(sceneB));
        return new Scene(sceneRoot, binding.getRoot());
    }
    // createSceneB・Cも同様に
}

これでSceneとDataBindingを連携させることができました。

まとめ

以上で説明は終わりです。
何か不明な点・間違いがあったらコメントで指摘おねがいします。

1
2
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
1
2