gpt4 book ai didi

java - 即使调用notifydatasetchanged()后,我的 ListView 也没有更新

转载 作者:行者123 更新时间:2023-12-02 03:15:16 25 4
gpt4 key购买 nike

我不知道为什么,但我的 ListView 没有更新...我正在调用notifyDataSetChanged(),并且我还尝试了他们要求执行此操作的另一个答案:

 private void editTransaction(int position) {
h = historyItems.get(position);
historyItems.remove(position);
this.position = position;
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);

if (requestCode == 5 && resultCode == RESULT_OK) {
String description = data.getStringExtra("description");
if (description == null) description = "no description";

double amount = Double.parseDouble(data.getStringExtra("amount"));

h.setDescription(description);
h.setAmount(amount);
//h.setTimestamp(System.currentTimeMillis());

//this is where I am updating my arraylist....

historyItems.add(position,h);
adapter.notifyDataSetChanged();


user.makeEdit(h);

}
}

这是在我的自定义适配器中。

public class HistoryCustomAdapter extends BaseAdapter {

Context context;
ArrayList<HistoryItem> historyItems;
HashMap<String,String> iconMapper;

private static LayoutInflater inflater=null;

public HistoryCustomAdapter(Context context, ArrayList<HistoryItem> historyItems, HashMap<String, String> iconMapper) {
this.context=context;
this.historyItems=historyItems;
this.iconMapper=iconMapper;
inflater = ( LayoutInflater )context.
getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

@Override
public int getCount() {
return historyItems != null ? historyItems.size() : 0;
}

@Override
public Object getItem(int position) {
return historyItems.get(position);
}

@Override
public long getItemId(int position) {
return 0;
}

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

Holder holder;
if (convertView == null) {
holder = new Holder();
LayoutInflater vi = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = vi.inflate(R.layout.history_item, parent, false);

holder.tvCat = (TextView)convertView.findViewById(R.id.tv_category);
holder.tvAmt = (TextView)convertView.findViewById(R.id.tv_amount);
holder.tvDate = (TextView)convertView.findViewById(R.id.tv_date);
holder.img = (ImageView)convertView.findViewById(R.id.iv);
convertView.setTag(holder);

}

holder=(Holder)convertView.getTag();
HistoryItem historyItem;
historyItem = historyItems.get(position);

holder.tvCat.setText(historyItem.getCategory());
holder.tvAmt.setText(historyItem.getAmount()+"");

DateFormat df = new SimpleDateFormat("yyyy/MM/dd kk:mm:ss");
Calendar c = Calendar.getInstance();
c.setTimeInMillis(historyItem.getTimestamp());
Date day = c.getTime();

holder.tvDate.setText(df.format(day));

Resources res = context.getResources();
String mDrawableName = iconMapper.get(historyItem.getCategory());
int resID = res.getIdentifier(mDrawableName , "drawable", context.getPackageName());
holder.img.setImageResource(resID);

return convertView;
}

public void refresh(ArrayList<HistoryItem> historyItems)
{
this.historyItems.clear();
this.historyItems.addAll(historyItems);
//notifyDataSetChanged();
}

public class Holder
{
TextView tvCat,tvAmt,tvDate;
ImageView img;
}

}

我不知道为什么我的 ListView 没有立即更新...我应该切换到ArrayAdapters吗?

最佳答案

尝试清除您的this.historyItems,然后this.historyItems.addAll(historyItems)。希望它有效!

无论如何,如果你尝试 ViewHolder 模式,你应该重用它:

if (rowView == null) {
// init view, holder
rowView.setTag(holder)
} else {
holder = (Holder) rowView.getTag();
}

// fill data

也许这就是你的 ListView 没有立即反射(reflect)的原因。

关于java - 即使调用notifydatasetchanged()后,我的 ListView 也没有更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40403806/

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