java–Android spinner使用XML进行数据绑定并显示所选值

java–Android spinner使用XML进行数据绑定并显示所选值,第1张

概述我正在使用新的Android数据绑定,它工作得很好.我可以使用EditText,TextView,Radio和复选框执行数据绑定.现在,我无法在微调器中进行数据绑定.在下面的链接中找到了一些线索:Androidspinnerdatabindingwithxmllayout但是,仍然无法找到解决方案.还需要执行双向数据绑定.应该

我正在使用新的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进行数据绑定并显示所选值所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1100695.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存