Android - ListView: флажки не остаются отмеченными - PullRequest
4 голосов
/ 06 апреля 2011

У меня есть представление списка, содержащее около 200 элементов, я реализовал собственный ArrayAdapter для флажков. Я использую SparseBooleanArray для хранения значений полей.

Все это прекрасно работает, но я не могу графически обновить проверку флажков. Если пользователь нажимает, то флажок установлен. Но если я вызову setChecked в моем коде, это не повлияет на сам блок (поэтому, даже если его значение равно true, оно не отмечено).

Я проверил, пытаясь установить все флажки в true и не повезло, хотя они все отмечены, они не показывают, что они есть. Не уверен, какой код вам нужно увидеть, но я точно добавил в свой адаптер:

class CheckBoxArrayAdapter extends ArrayAdapter<String> implements CompoundButton.OnCheckedChangeListener { 
private SparseBooleanArray checkedBoxes; 
Context context;

public CheckBoxArrayAdapter(Context context, int resource, List<String> objects) { 
    super(context, resource, objects); 
    checkedBoxes = new SparseBooleanArray();
    this.context = context;
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    final CheckBox view = (CheckBox) super.getView(position, convertView, parent);
        //if(convertView == null) {
            //convertView = view.inflate(context, R.layout.list_item, null);
        //}
    view.setTag(position);
    view.setChecked(checkedBoxes.get(position, false));
    System.out.println(view.getTag() + ": " + view.isChecked());
    view.setOnCheckedChangeListener(this); 
    return view; 
} 

public boolean isChecked(int position) { 
    return checkedBoxes.get(position, false); 
} 
public void setChecked(int position, boolean isChecked) { 
    checkedBoxes.put(position, isChecked); 
    notifyDataSetChanged(); 
} 

public void toggle(int position) { 
    setChecked(position, !isChecked(position)); 
} 

public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
    checkedBoxes.put((Integer) buttonView.getTag(), buttonView.isChecked()); 
} 

}

Спасибо, ребята!

1 Ответ

2 голосов
/ 07 апреля 2011

Хорошо, кажется, что Checked Text View - лучший способ сделать это, использовать их в качестве элемента списка, а это в качестве слушателя:

            public void onItemClick(AdapterView<?> parent, View view, int pos,long id) 
        {
            if(!isChecked.get(pos)) {
                messageList.setItemChecked(pos, true);
                isChecked.put(pos, true);
            }else{
                messageList.setItemChecked(pos, false);
                isChecked.put(pos, false);
            }
            //sendEmail("encima+Gmail4wrdr@gmail.com", address.get(pos) + ": " +  subject.get(pos), Jsoup.parse(message.get(pos)).toString());
        }   

Пример, который я использовал ранее, был предоставлен Google AndroidДев, вот почему я думал, что это обычное дело.Но, так это или нет, этот способ намного проще!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...