创建复选框运行时并使用 DataBinding 获取值
create checkboxes runtime and get values using DataBinding
目前我正在我的应用程序中使用 DataBinding
,它运行得非常好。现在我有一个问题,我们可以根据 API 响应创建多个复选框吗?
就像我的模型中有一个 ArrayList
class,无论该数组列表的大小是多少,都应该添加很多复选框。
{"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实现。
这个怎么样:
LinearLayout root= (LinearLayout)findViewById(R.id.test);
// use loop
CheckBox checkBoxOne = new CheckBox(this);
root.addView(checkBoxOne);
终于搞定了,不知道databinding的用法对不对
像这样创建了绑定方法
@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());
}
目前我正在我的应用程序中使用 DataBinding
,它运行得非常好。现在我有一个问题,我们可以根据 API 响应创建多个复选框吗?
就像我的模型中有一个 ArrayList
class,无论该数组列表的大小是多少,都应该添加很多复选框。
{"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实现。
这个怎么样:
LinearLayout root= (LinearLayout)findViewById(R.id.test);
// use loop
CheckBox checkBoxOne = new CheckBox(this);
root.addView(checkBoxOne);
终于搞定了,不知道databinding的用法对不对
像这样创建了绑定方法
@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());
}