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は活用していこうかと思う。

