我有以下问题:
我正在尝试从firebase加载一些数据,在加载数据并将其存储在HashMap中后,我调用“updateAdapter”函数(在下面的适配器中声明),虽然数据已被更改,但ListView不会刷新直到一些后来的随机(IMO)时刻。我阅读了几个与我的问题相关的帖子,并尝试了不同的解决方案,但他们并没有解决我的问题。顺便说一句 - 是的,我检查了适配器是否丢失了对列表的引用而它没有。
我的适配器看起来像这样:
public class NoteAdapterHashMap extends BaseAdapter{
private ArrayList mData = new ArrayList();
public NoteAdapterHashMap(Map<String, Note> map) {
mData.addAll(map.entrySet());
}
@Override
public int getCount() {
return mData.size();
}
@Override
public Map.Entry<String, Note> getItem(int position) {
return (Map.Entry) mData.get(position);
}
@Override
public long getItemId(int position) {
// TODO implement logic with ID
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final View result;
if (convertView == null) {
result = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_note_listview, parent, false);
} else {
result = convertView;
}
Note note = getItem(position).getValue();
if(note!=null){
TextView title = (TextView) result.findViewById(R.id.list_note_title);
TextView date = (TextView) result.findViewById(R.id.list_note_date);
TextView content = (TextView) result.findViewById(R.id.list_note_content);
title.setText(note.getmTitle());
date.setText(note.getDateFormatted(parent.getContext()));
content.setText(note.getmContent());
if(note.getmContent().length()>50){
content.setText(note.getmContent().substring(0,50));
}
}
return result;
}
public void updateAdapter(HashMap<String,Note> map){
this.mData.clear();
this.mData.addAll(map.entrySet());
this.notifyDataSetChanged();
}
@Override
public void registerDataSetObserver(DataSetObserver observer) {
super.registerDataSetObserver(observer);
}
}
提前致谢!