LinearLayout

时间:2017-05-04 17:41:11

标签: java android xml checkbox

在我的LinearLayout中,有一个可变数量的CheckBoxes。在一个月前的一个问题中,有人说最好动态添加复选框,而不是让它们不可见。

Integer[] count = new Integer[]{1,2,3,4,5,6,7,8,9,10};
size = mFrageList.get(position).getAuswahlList().size();
for (int i = 0; i < size; i++) {

    cBox = new CheckBox(this);
    cBox.setText(mFrageList.get(position).getAuswahlList().get(i));
    cBox.setId(count[i]);
    cBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

           if(isChecked){
                antwortencode[position] += "" + buttonView.getId();
                frageBeantworten.setText("Antwort :"+antwortencode[position]+" abgeben");

            } else {
                 String id = Integer.toString(buttonView.getId());
                 antwortencode[position] = antwortencode[position].replaceAll(id,"");
                 if(!antwortencode[position].isEmpty() || antwortencode[position]!= "") {
                     frageBeantworten.setText("Antwort :" + antwortencode[position] + " abgeben");
                  } else {
                      frageBeantworten.setText("Keine Checkbox(en) gewählt");
                  }
           }
       }
});

antworten.addView(cBox);

目前,我可以使用选中的复选框保存字符串,如果我取消选中复选框,它会从字符串中删除它的值。 如果我更新活动,则保存字符串,并且复选框从mFrageList.get(position)getAuswahlList()获取新的List;并在“antwortencode”列表中填入一个新字符串及其值。

如果我回到最后一个位置,我会生成生成的字符串,但不再检查复选框。但他们从旧位置获得了弦乐。这意味着除了复选框的状态之外,所有内容都会被保存。我无法设置cBox.setChecked(isChecked)或buttonView.setChecked(isChecked)或buttonView.setChecked(buttonView.isChecked())或语法上几乎相同的东西。

我不知道我能做什么,除了在xml文件中声明10个Checkbox,然后逐个与它们交谈,如果auswahlList.get(position).isEmpty(),则设置VISIBLE.false。

重要提示:我的XML是可滚动活动,因为内容的大小过度扩展了屏幕。这就是为什么我没有,也不能使用Listview。所以我需要一个使用LinearLayout

的解决方案

1 个答案:

答案 0 :(得分:0)

事实是,你应该使用ListView。只要您多次重复使用布局 - 就可以了。

有两个选项:

另一件事是如何维护Checkboxes的状态 - 使用模型类。使用ListView非常容易,因为它会强制您使用Adapter来提供迭代所有位置的方法。

适配器示例:

public class CheckableItemAdapter extends BaseAdapter {

private List<Pair<Integer, Boolean>> items = new ArrayList<>();

public void setItems(List<Pair<Integer, Boolean>> items) {
    this.items = items;
}

@Override
public int getCount() {
    return items.size();
}

@Override
public Object getItem(int position) {
    return items.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View view;
    ViewHolder holder;
    if (convertView == null) {
        view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_checkable, parent, false);
        holder = new ViewHolder(view);
        view.setTag(holder);
    } else {
        view = convertView;
        holder = (ViewHolder) view.getTag();
    }
    Pair<Integer, Boolean> item = items.get(position);
    holder.itemCheck.setChecked(item.second);
    return view;
}

static class ViewHolder {

    CheckBox itemCheck;

    public ViewHolder(View itemView) {
        itemCheck = (CheckBox) itemView.findViewById(R.id.check);
    }
}
}