我有ListView
跟踪已支付的金额,如果用户使用相同类型的付款进行两次付款,则列表中的这两个条目应合并为一个并添加金额。
Payment 1 - $50 - Check
Payment 2 - $100 - Check
以上在ListView中看起来如此:
$150 - Check
$50 - Check
所以金额确实被添加但我删除持有50美元金额的行的逻辑不起作用......不太确定为什么,但重点是将它们合并在一起并删除那个持有50美元的不必要的行。
以下是我的更新方法中的相关代码以及扩展getView
的适配器类中的ArrayAdapter<ClassObject>
方法。
getView()
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi;
vi = LayoutInflater.from(getContext());
v = vi.inflate(R.layout.fragment_payscreen_tab2_listgrid_row, null);
}
//Get item from list
InvoiceListModel item = this.getItem(position);
if (item != null) {
TextView txtAmount = (TextView)v.findViewById(R.id.PayScreen_Tab2_Columns_txtAmount);
TextView txtPaidBy = (TextView)v.findViewById(R.id.PayScreen_Tab2_Columns_txtPaidBy);
txtPaidBy.setText(item.paidBy);
txtAmount.setText(item.amount);
}
return v;
}
适配器自定义更新方法
public boolean update(InvoiceListModel object){
for(int x=0; x< uiListViewCollectionData.size(); x++){
InvoiceListModel tempObj = uiListViewCollectionData.get(x);
if(tempObj != null &&
tempObj.paidBy.equals(object.paidBy)){
//Set the data on the temp object
tempObj.amount = uiListViewCollectionData.get(x).amount.plus(object.amount);
//Remove the old outdated object from datasource
uiListViewCollectionData.remove(x);
this.notifyDataSetChanged();
//Add the new model containing the new amount back to list
uiListViewCollectionData.add(tempObj);
this.notifyDataSetChanged();
return true;
}
}
return false;
}
我非常确定notifyDataSetChanged()
是async
,这导致下一行快速执行。是否有可能在我需要的时候直接呈现ListView
UI组件?
答案 0 :(得分:1)
如何将数据传递到列表?
你应该重新包装&#39;你的old_data并将new_data传递给适配器。类似的东西:
new_data = repack (old_data);
myAdapter = new MyAdapter(new_data);
因此,如果old_data有50个项目,则新数据将只有35个(例如),并且您在列表中显示这35个项目。合并逻辑应该不在getView()中。