我有一个(子类)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;
}
答案 0 :(得分:0)
您是在重新创建集合还是正在更新集合中的项目?如果重新创建集合,notifyDataSetChanged()将不起作用。如果项目正在更新,它应该可以工作。
如果您确实需要销毁/重新创建集合,请将新适配器设置为列表。