当配置了 2 路数据绑定时,我正在努力获取一些与 Android spinner 一起使用的功能。我想通过 2 路数据绑定设置微调器的初始值android:selectedItemPosition
。微调器条目由 ViewModel 初始化并正确填充,因此数据绑定似乎工作正常。
问题在于 2 路绑定selectedItemPosition
。该变量由 ViewModel 初始化为 5,但微调器的所选项目仍为 0(第一项)。调试时,ObservableInt 的值最初为 5(按设置),但在executeBindings 的第二阶段重置为零。
任何帮助,将不胜感激。
test_spinner_activity.xml
<layout xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable name="viewModel"
type="com.aapp.viewmodel.TestSpinnerViewModel"/>
</data>
<LinearLayout android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.AppCompatSpinner
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:id="@+id/sTimeHourSpinner"
android:selectedItemPosition="@={viewModel.startHourIdx}"
android:entries="@{viewModel.startTimeHourSelections}"/>
</LinearLayout>
</layout>
TestSpinnerViewModel.java
public class TestSpinnerViewModel {
public final ObservableArrayList<String> startTimeHourSelections = new ObservableArrayList<>();
public final ObservableInt startHourIdx = new ObservableInt();
public TestSpinnerViewModel(Context context) {
this.mContext = context;
for (int i=0; i < 24; i++) {
int hour = i;
startTimeHourSelections.add(df.format(hour));
}
startHourIdx.set(5);
}
}
TestSpinnerActivity.java
public class TestSpinnerActivity extends AppCompatActivity {
private TestSpinnerActivityBinding binding;
private TestSpinnerViewModel mTestSpinnerViewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = DataBindingUtil.bind(findViewById(R.id.test_spinner));
mTestSpinnerViewModel = new TestSpinnerViewModel(this);
binding.setViewModel(mTestSpinnerViewModel);
}
我正在使用 Android Studio 2.2.2 并启用了数据绑定。