
我正在使用新的Android数据绑定,它工作得很好.我可以使用EditText,TextVIEw,Radio和复选框执行数据绑定.现在,我无法在微调器中进行数据绑定.
在下面的链接中找到了一些线索:
Android spinner data binding with xml layout
但是,仍然无法找到解决方案.还需要执行双向数据绑定.应该反映微调器数据的选择值.
有人可以给我一个例子吗?
这是我的xml代码:
<layout xmlns:androID="http://schemas.androID.com/apk/res/androID" xmlns:app="http://schemas.androID.com/tools" xmlns:card_vIEw="http://schemas.androID.com/apk/res-auto"> <data> <import type="androID.vIEw.VIEw" /> <variable name="viewmodel" type="com.viewmodels.model" /> </data> <Spinner androID:ID="@+ID/assessmemt_spinner" androID:layout_wIDth="match_parent" androID:layout_height="wrap_content" androID:layout_alignParentRight="true" androID:layout_margin="@dimen/carvIEw_margin" androID:layout_toRightOf="@+ID/text_bp" androID:drawSelectorOntop="true" androID:spinnerMode="dropdown" androID:visibility="@{viewmodel.type.equals(@string/spinner_type)? VIEw.VISIBLE : VIEw.GONE}" /></layout>查看型号:
public class AssessmentGetviewmodel { private String valueWIDth; private ArrayList<String> values; private String type; public String getValueWIDth() { return this.valueWIDth; } public voID setValueWIDth(String valueWIDth) { this.valueWIDth = valueWIDth; } public ArrayList<String> getvalues() { return this.values; } public voID setvalues(ArrayList<String> values) { this.values = values; } public String gettype() { return this.type; } public voID settype(String type) { this.type = type; } }解决方法:
我发现有些东西可能会有所帮助,但它不在双向数据绑定的官方文档中.
1.’@ =’用于双向数据绑定
2.双向自定义数据绑定需要“BindingAdapter”和“InverseBindingAdapter”注释来实现这一点.
对于第一项,许多博客显示“@ =”用于双向数据绑定. https://halfthought.wordpress.com/2016/03/23/2-way-data-binding-on-android/
对于第二项,正如@George Mound在这里回复(Edit text cursor resets to left when default text of edittext is a float value),可以使用“BindingAdapter”和“InverseBindingAdapter”注释以双向方式绑定EditText.
按照说明,您可以为spinner构建双向绑定方法.
首先,创建viewmodel或使用Pojo
视图模型
public class viewmodel { private ObservableFIEld<String> text; public viewmodel() { text = new ObservableFIEld<>(); } public ObservableFIEld<String> getText() { return text; }}POJO
public class viewmodel { private String text; public String getText() { return text; } public voID setText(String text) { this.text = text; }}其次,将其添加到您的xml中.
<androID.support.v7.Widget.AppCompatSpinner androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:entrIEs="@array/days" bind:selectedValue="@={viewmodel.text}"/>第三,添加你的bindingUtil
public class SpinnerBindingUtil { @BindingAdapter(value = {"selectedValue", "selectedValueAttrChanged"}, requireAll = false) public static voID bindSpinnerData(AppCompatSpinner pAppCompatSpinner, String newSelectedValue, final InverseBindingListener newTextAttrChanged) { pAppCompatSpinner.setonItemSelectedListener(new AdapterVIEw.OnItemSelectedListener() { @OverrIDe public voID onItemSelected(AdapterVIEw<?> parent, VIEw vIEw, int position, long ID) { newTextAttrChanged.onChange(); } @OverrIDe public voID onnothingSelected(AdapterVIEw<?> parent) { } }); if (newSelectedValue != null) { int pos = ((ArrayAdapter<String>) pAppCompatSpinner.getAdapter()).getposition(newSelectedValue); pAppCompatSpinner.setSelection(pos, true); } } @InverseBindingAdapter(attribute = "selectedValue", event = "selectedValueAttrChanged") public static String captureSelectedValue(AppCompatSpinner pAppCompatSpinner) { return (String) pAppCompatSpinner.getSelectedItem(); }}如你所见,它使用“selectedValue”作为默认选定值的变量,但是什么是“selectedValueAttrChanged”?我认为这个很棘手(我不知道为什么它在调用时不为null),它不需要在xml中添加,因为它只是用于监听在微调器中更改的项的回调.然后设置onItemSelectedListener并将其设置为调用InverseBindingListener onchange()函数(文档和示例:https://developer.android.com/reference/android/databinding/InverseBindingAdapter.html)默认事件将是“androID:textAttrChanged”,如果您想要自定义双向绑定反向绑定,则需要使用带有后缀“AttrChanged”的属性
The default value for event is the attribute name suffixed with
“AttrChanged”. In the above example, the default value would have been
androID:textAttrChanged even if it wasn’t provIDed.
最后,在您的活动和您的string.xml中
protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ActivityMainBinding lBinding = DataBindingUtil.inflate(LayoutInflater.from(this), R.layout.activity_main, null, false); mviewmodel = new viewmodel(); mviewmodel.getText().set("Wednesday"); lBinding.setviewmodel(mviewmodel); lBinding.setHandler(new Handler()); setContentVIEw(lBinding.getRoot());}string.xml
<array name="days"> <item name="Mon">Monday</item> <item name="Tue">Tuesday</item> <item name="Wed">Wednesday</item></array>运行代码时,它将显示“星期三”作为微调器的默认值.希望这可以为许多人提供帮助
总结以上是内存溢出为你收集整理的java – Android spinner使用XML进行数据绑定并显示所选值全部内容,希望文章能够帮你解决java – Android spinner使用XML进行数据绑定并显示所选值所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)