Как мне указать ArrayAdapter перерисовать все его элементы? - PullRequest
1 голос
/ 07 марта 2012

У меня есть список элементов в (подклассе) ArrayAdapter, и когда один из элементов в ArrayAdapter изменяется, все они должны обновить свое представление. (Для некоторого контекста это модель оптовых цен, когда чем больше вещей вы покупаете, тем дешевле становится все остальное, и я хочу обновить цену всего, когда вы добавляете что-то в корзину)

Прочитав документацию, я ожидал, что notifyDataSetChanged () добьется цели, но это не то, что я хочу. Что мне делать?

По запросу, вот моя функция getView. Метод orderPhoice - метод totalPrice (), который изменяется в зависимости от того, что еще выбрано.

@Override
public View getView(int position, View convertView, final ViewGroup parent){
    final EditingOrderChoiceAdapter adapter = this;
    View choiceView = convertView;
    if (choiceView == null){
        LayoutInflater choiceViewInflater = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        choiceView = choiceViewInflater.inflate(R.layout.order_choice_row, null);
    }

    final OrderChoice orderChoice = choices.get(position);
    if (orderChoice != null){
        TextView choiceName = (TextView)choiceView.findViewById(R.id.choice_name);
        choiceName.setText(orderChoice.choice.name);

        TextView choicePrice = (TextView)choiceView.findViewById(R.id.choice_price);
        choicePrice.setText(orderChoice.totalPrice().formatted());

        CheckBox choiceCheckBox = (CheckBox)choiceView.findViewById(R.id.choice_checked);
        choiceCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){

            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                orderChoice.selected = isChecked;
                adapter.notifyDataSetChanged();
            }
        });
        choiceCheckBox.setChecked(orderChoice.selected);
    }
    return choiceView;
}

1 Ответ

0 голосов
/ 07 марта 2012

Вы воссоздаете коллекцию или обновляете элементы в коллекции?Если вы воссоздаете коллекцию, notifyDataSetChanged () не будет работать.В случае, если элементы обновляются, это должно работать.

Если вам действительно нужно уничтожить / воссоздать коллекцию, установите новый адаптер в список.

...