我在用android:entries
中的String[]
填充ViewModel
时遇到问题。代码如下所示:
attrs.xml
<declare-styleable name="AutoCompleteDropDown">
<attr name="android:entries" />
</declare-styleable>
我的自定义下拉菜单AutoCompleteDropDown
public class AutoCompleteDropDown extends AppCompatAutoCompleteTextView {
public AutoCompleteDropDown(Context context, AttributeSet attributes) {
super(context, attributes);
TypedArray a = context.getTheme().obtainStyledAttributes(attributes, R.styleable.AutoCompleteDropDown, 0, 0);
CharSequence[] entries = a.getTextArray(R.styleable.AutoCompleteDropDown_android_entries);
ArrayAdapter<CharSequence> adapter = new ArrayAdapter<>(context, android.R.layout.simple_dropdown_item_1line, entries);
setAdapter(adapter);
}
...
ViewModel
...
private String[] genders;
public String[] getGenders() {
return genders;
}
public void setGenders(String[] genders) {
this.genders = genders;
}
...
genders
填充在ViewModel
构造函数中:genders = dataRepository.getGenders();
xml文件
<AutoCompleteDropDown
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@={vm.title}"
android:entries="@{vm.genders}"
bind:addTextChangedListener="@{vm.titleValidationChangeListener}"/>
ViewModel
已正确绑定(bind),我在该xml文件中使用了很多次。当我尝试运行该应用程序时,我得到:当我使用
android:entries="@array/genders"
时它有效,但是我需要此列表是动态的。项目处于MVVM模式。感谢任何帮助:) 最佳答案
您可以为此使用BindingAdapter
。喜欢 :
@BindingAdapter("entries")
public static void entries(AutoCompleteDropDown view, String[] array) {
view.updateData(array);
}
updateData
这是您必须在AutoCompleteDropDown
中创建的方法。在xml中使用相同的
app:entries="@{vm.genders}"