gpt4 book ai didi

android - notifyDataSetChange 不适用于自定义适配器

转载 作者:IT老高 更新时间:2023-10-28 13:02:05 26 4
gpt4 key购买 nike

当我重新填充 ListView 时,我会从 Adapter 调用特定方法。

问题:

当我从我的 Adapter 调用 updateReceiptsList 时,数据被刷新,但我的 ListView 没有反射(reflect)更改。

问题:

为什么我调用notifyDataSetChanged时我的ListView没有显示新数据?

适配器:

public class ReceiptListAdapter extends BaseAdapter {

public List<Receipt> receiptlist;
private Context context;
private LayoutInflater inflater;
private DateHelpers dateH;

public ReceiptListAdapter(Activity activity, Context mcontext, List<Receipt> rl) {
context = mcontext;
receiptlist = rl;
Collections.reverse(receiptlist);
inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
dateH = new DateHelpers();
}

@Override
public int getCount() {
try {
int size = receiptlist.size();
return size;
} catch(NullPointerException ex) {
return 0;
}
}

public void updateReceiptsList(List<Receipt> newlist) {
receiptlist = newlist;
this.notifyDataSetChanged();
}

@Override
public Receipt getItem(int i) {
return receiptlist.get(i);
}

@Override
public long getItemId(int i) {
return receiptlist.get(i).getReceiptId() ;
}

private String getPuntenString(Receipt r) {
if(r.getPoints().equals("1")) {
return "1 punt";
}
return r.getPoints()+" punten";
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
View vi=convertView;

final Receipt receipt = receiptlist.get(position);
ReceiptViewHolder receiptviewholder;
Typeface tf_hn = Typeface.createFromAsset(context.getAssets(), "helveticaneue.ttf");
Typeface tf_hn_bold = Typeface.createFromAsset(context.getAssets(), "helveticaneuebd.ttf");

if (vi == null) { //convertview==null
receiptviewholder = new ReceiptViewHolder();
vi = inflater.inflate(R.layout.view_listitem_receipt, null);
vi.setOnClickListener(null);
vi.setOnLongClickListener(null);
vi.setLongClickable(false);
receiptviewholder.shop = (TextView) vi.findViewById(R.id.tv_listitemreceipt_shop);
receiptviewholder.date = (TextView) vi.findViewById(R.id.tv_listitemreceipt_date);
receiptviewholder.price = (TextView) vi.findViewById(R.id.tv_listitemreceipt_price);
receiptviewholder.points = (TextView) vi.findViewById(R.id.tv_listitemreceipt_points);
receiptviewholder.shop.setTypeface(tf_hn_bold);
receiptviewholder.price.setTypeface(tf_hn_bold);
vi.setTag(receiptviewholder);
}else{//convertview is not null
receiptviewholder = (ReceiptViewHolder)vi.getTag();
}

receiptviewholder.shop.setText(receipt.getShop());
receiptviewholder.date.setText(dateH.timestampToDateString(Long.parseLong(receipt.getPurchaseDate())));
receiptviewholder.price.setText("€ "+receipt.getPrice());
receiptviewholder.points.setText(getPuntenString(receipt));

vi.setClickable(false);
return vi;
}

public static class ReceiptViewHolder {
public TextView shop;
public TextView date;
public TextView price;
public TextView points;
}

public Object getFilter() {
// XXX Auto-generated method stub
return null;
}

}

--编辑:

找到解决方法

只是为了有一些我现在做的功能代码:

listview.setAdapter( new ReceiptListAdapter(activity,mcontext, -new dataset-);

有效,但不是它应该如何工作。

最佳答案

改变你的方法

public void updateReceiptsList(List<Receipt> newlist) {
receiptlist = newlist;
this.notifyDataSetChanged();
}

public void updateReceiptsList(List<Receipt> newlist) {
receiptlist.clear();
receiptlist.addAll(newlist);
this.notifyDataSetChanged();
}

因此,您在适配器中保留与 DataSet 相同的对象。

关于android - notifyDataSetChange 不适用于自定义适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15422120/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com