自分のブログにも書いたけど、こっちでも共有します。
うまくViewModelからXmlのスピナーを制御できないかなーといろいろ調査したらできました。
とある記事で@=
を使ってTwo-way Bindingをやってるのもありましたが、今回はリスナーで変更を受けて更新する感じです。
方法
activity_something.xml
<Spinner
android:id="@+id/spinner_number"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:spinnerMode="dialog"
android:onItemSelected="@{(parent, view, position, id) -> viewModel.onItemSelectedNumber(parent, view, position, id)}"
android:entries="@{viewModel.numberList}"
/>
SomethingViewModel.java
public void onItemSelectedNumber(AdapterView<?> parent, View view, int position, long id) {
setNumber(numberList.get(position));
//Call Sip Register here
}
android:entries
にviewModelからListを渡しています。裏側でうまくCharSequence[]
へ変換して、Adapterへの設定もやってくれます。
setOnItemSelectedListener
のonItemSelected
メソッドをViewModelに用意してXMLに渡しています。
これで、ユーザーがアイテム選択した祭に、ViewModel側で対処できます。