【问题标题】:create checkboxes runtime and get values using DataBinding创建复选框运行时并使用 DataBinding 获取值
【发布时间】:2016-05-17 04:45:37
【问题描述】:

目前我在我的应用程序中使用DataBinding,它的工作就像魅力一样。现在我有一个问题,我们可以根据 API 响应创建多个复选框吗?

就像我的模型类中有一个ArrayList,无论该数组列表的大小是多少,都应该添加很多复选框。

{"hobby": [
  {
    "id": "1",
    "hobby": "Sports"
  },
  {
    "id": "2",
    "hobby": "Hangout"
  },
  {
    "id": "3",
    "hobby": "Skydiving"
  },
  {
    "id": "4",
    "hobby": "Scubadiving"
  },
  {
    "id": "5",
    "hobby": "Travelling"
  }
]}

现在我想创建所有爱好的复选框,并想检索选定复选框的值。

谁能帮我解决这个问题?

我为此创建了 BindingAdapter,并且能够创建复选框运行时

@BindingAdapter({"bind:values"})
public static void createCheckboxes(LinearLayout layout, UserModel model) {
    List<UserModel.Hobby> list = model.getHobby();
    for (int i = 0; i < list.size(); i++) {
        CheckBox chk = new CheckBox(layout.getContext());
        chk.setText(list.get(i).getHobby());
        layout.addView(chk);
    }
}

现在的问题是如何获取选中的复选框值。

注意:需要用DataBinding来实现。

【问题讨论】:

  • 这取决于您如何显示数据,就像您使用列表视图或其他类似的,那么您需要在自定义设计视图中添加复选框,或者如果您直接在屏幕上显示它,那么您需要自定义存储 id 和爱好的模型类。
  • 自定义模型类是什么意思?你能澄清一下吗?
  • 永远不要尝试这个,但你可以检查这个Blog
  • 当你得到你存储的数据时???为了存储数据,您可能已经声明了像 Hobby 这样的类,您在其中设置了 getter 和 setter ID 的方法以及该类的 Hobby。
  • @MD 谢谢,很好的提示,两种方式绑定可能对我有帮助

标签: android android-databinding android-binding-adapter


【解决方案1】:

终于搞定了,不知道数据绑定的使用是否正确。

这样创建绑定方法

@BindingAdapter({"bind:values"})
public static void createCheckboxes(LinearLayout layout, UserModel model) {
   List<UserModel.Hobby> list = model.getHobby();
   for (int i = 0; i < list.size(); i++) {
      CheckBox chk = new CheckBox(layout.getContext());
      chk.setText(list.get(i).getHobby());

      final int finalI = i;
      chk.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    UserModel.Hobby model=list.get(finalI);
                    if(model.isSelected())
                        model.setSelected(false);
                    else
                        model.setSelected(true);
                    list.set(finalI,model);
                    layout.invalidate();
                }
      });

      layout.addView(chk);
   }
}

在我的 xml 中,创建了一个 LinearLayout

<LinearLayout
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:orientation="vertical"
     android:layout_marginLeft="15dp"
     app:values="@{user}"/>

在保存数据时,我只是使用 for 循环检查并获取选择了哪些值。

for (int i = 0; i < list.size(); i++) {
    if(list.get(i).isSelected())
                    Log.e("", "selected: " + list.get(i).getHobby());
 }

【讨论】:

    【解决方案2】:

    这个怎么样:

    LinearLayout root= (LinearLayout)findViewById(R.id.test);
    // use loop 
    CheckBox checkBoxOne = new CheckBox(this);
    root.addView(checkBoxOne);
    

    【讨论】:

    • 很好,DataBinding 怎么做?
    猜你喜欢
    • 1970-01-01
    • 2015-07-22
    • 2017-11-03
    • 1970-01-01
    • 2020-11-22
    • 1970-01-01
    • 2018-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多