我在用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}"

09-13 05:41