2019年03月18日

[Android開発ネタ] DataBinding + LiveDataでViewをイジイジしてみる

LiveDataって言う存在を最近知ったので、、、。
超今更感だとは思うけど、、、、。

単純なLiveDataの使い方はLiveDataをActivityなりFragmentなりでovserveして値が変更されたらViewを書き換えるとかだと思う。

思う、、、。


た、多分、、、、。


Viewを書き換えるだけだったらBindingで行けるんじゃない?と思い調べたらやり方あったのでメモ的にサンプル書いた。


build.gradleに以下を追加。
implementation 'android.arch.lifecycle:extensions:1.1.1'


activity_main.xml
<?xml version="1.0" encoding="utf-8"?>

<layout

xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools">



<data>

<variable

name="vm"

type="com.example.livedatatest.HogeViewModel"/>

</data>

<LinearLayout

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical">



<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@{vm.text}"

tools:text="テキスト"/>



<Button

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="HOGE"

android:onClick="@{vm::hogeButtonClick}"/>



</LinearLayout>



</layout>


HomeViewModel
class HogeViewModel : ViewModel() {

var text = MutableLiveData<String>()

fun hogeButtonClick(view: View) {

if (TextUtils.isEmpty(text.value)) {
text.postValue("HOGE")
} else {
text.postValue(text.value + "HOGE")
}
}
}


MainActivity
class MainActivity : AppCompatActivity() {

private val binding: ActivityMainBinding by lazy {
DataBindingUtil.setContentView<ActivityMainBinding>(this, R.layout.activity_main)
}

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding.setLifecycleOwner(this)
binding.vm = ViewModelProviders.of(this).get(HogeViewModel::class.java)
}
}


これでHOGEボタン押したらHOGEって文字が増殖するアプリの出来上がりw

xmlにonClickを書くのは少しやりすぎな感じもするけど、xmlで諸々完結できてしまうのは良いなって思う。
新規アプリとか担当することになったらとりあえず、LiveDataは活用していこうかと思う。
posted by すとれん at 11:45 | Comment(0) | Android開発ネタ | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: