1

現在DataBinding、私は自分のアプリケーションで使用しており、魅力的に機能しています。ここで質問があります。API 応答に基づいて複数のチェックボックスを作成できますか?

モデルクラスに1つあるよう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 で実装する必要があります。

4

2 に答える 2

0

最後にそれを行いましたが、それがデータバインディングの正しい使用かどうかわかりません。

このようなバインディングメソッドを作成しました

@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で、1つ作成しました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());
 }
于 2016-05-17T13:08:26.287 に答える
-1

これはどう :

LinearLayout root= (LinearLayout)findViewById(R.id.test);
// use loop 
CheckBox checkBoxOne = new CheckBox(this);
root.addView(checkBoxOne);
于 2016-05-17T04:49:08.060 に答える