Создавать флажки во время выполнения и получать значения с помощью DataBinding
В настоящее время я использую 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.
2 ответа
Наконец сделали это, не знаю, правильно ли это использовать привязку данных или нет.
созданный метод привязки, как это
@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());
}
Как насчет этого:
LinearLayout root= (LinearLayout)findViewById(R.id.test);
// use loop
CheckBox checkBoxOne = new CheckBox(this);
root.addView(checkBoxOne);