Android 在运行时创建复选框并使用数据绑定获取值

Android 在运行时创建复选框并使用数据绑定获取值,android,android-databinding,android-binding-adapter,Android,Android Databinding,Android Binding Adapter,目前,我正在我的应用程序中使用数据绑定,它工作得很好。现在我有一个问题,我们可以基于API响应创建多个复选框吗 就像我的模型类中有一个ArrayList,无论该ArrayList的大小如何,都应该添加很多复选框 {"hobby": [ { "id": "1", "hobby": "Sports" }, { "id": "2", "hobby": "Hangout" }, { "id": "3", "hobby": "Skydiv

目前,我正在我的应用程序中使用
数据绑定
,它工作得很好。现在我有一个问题,我们可以基于API响应创建多个复选框吗

就像我的模型类中有一个
ArrayList
,无论该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);
    }
}
@BindingAdapter({“bind:values”})
publicstaticvoidcreatecheckbox(LinearLayout布局,UserModel){
List=model.getHobby();
对于(int i=0;i
现在的问题是如何获取选中的复选框值


注意:需要通过数据绑定来实现它。这个怎么样:

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

终于做到了,不知道是否正确使用了数据绑定

创建了如下绑定方法

@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);
   }
}
在保存数据时,我只是检查for循环的使用情况,并得到选择的值

for (int i = 0; i < list.size(); i++) {
    if(list.get(i).isSelected())
                    Log.e("", "selected: " + list.get(i).getHobby());
 }
for(int i=0;i
太好了,如何使用数据绑定?这取决于您如何显示数据,如果您使用的是listview或其他类似的工具,那么您需要在自定义设计视图中添加复选框,或者,如果您直接在屏幕上显示它,那么您需要自定义您存储id和爱好的模型类。自定义模型类的含义是什么?请你把它写下来好吗?千万不要尝试这个,但当你在存储数据的地方得到数据时,你可以检查它???为了存储数据,您可能已经声明了一个类,比如Hobby,您已经为该类设置了getter和setter ID以及Hobby的方法。@MD谢谢,很好的提示,双向绑定可能会对我有所帮助
for (int i = 0; i < list.size(); i++) {
    if(list.get(i).isSelected())
                    Log.e("", "selected: " + list.get(i).getHobby());
 }