如何指示ArrayAdapter重绘其所有元素?

时间:2012-03-07 17:02:14

标签: java android listview android-arrayadapter

我有一个(子类)ArrayAdapter中的项列表,当ArrayAdapter中的一个项被更改时,它们都需要更新它们的视图。 (对于某些情况,它是一个批量定价模型,你买的东西越多,其他东西就越便宜,我想在你的购物车上添加东西时更新所有东西的价格)

通过阅读文档,我希望notifyDataSetChanged()能够做到这一点,但它没有做我想做的事情。我该怎么办?

根据要求,这是我的getView功能。 orderChoice的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 :(得分:0)

您是在重新创建集合还是正在更新集合中的项目?如果重新创建集合,notifyDataSetChanged()将不起作用。如果项目正在更新,它应该可以工作。

如果您确实需要销毁/重新创建集合,请将新适配器设置为列表。