【发布时间】:2015-08-24 08:41:31
【问题描述】:
您好,我有一个问题,当我调用 notifydataSetChanged 函数时只显示 1 个结果。我在这个论坛上读到需要清除数组列表,然后需要添加数据才能使 notifydataSetChanged 正常工作。我遵循了这一点,但问题是当新数据到达时,它会清除所有其他数据,只显示列表中的最新项目。我知道这是一个 clear() 问题,但我不知道如何解决它。任何建议将不胜感激。
我的适配器:
public MessageAdapter(Activity context, ArrayList<ArrayList<ReadMessage>> list) {
mContext = context;
mList = list;
mLayoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return mList.size();
}
@Override
public Object getItem(int pos) {
return mList.get(pos);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
CompleteListViewHolder viewHolder;
if (convertView == null) {
LayoutInflater li = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = li.inflate(R.layout.list_row, null);
viewHolder = new CompleteListViewHolder(v);
v.setTag(viewHolder);
} else {
viewHolder = (CompleteListViewHolder) v.getTag();
}
viewHolder.messageText.setText(mList.get(position).get(position).getMessage());
viewHolder.fromText.setText(mList.get(position).get(position).getSender());
return v;
}
}
class CompleteListViewHolder {
public TextView messageText;
public TextView fromText;
public CompleteListViewHolder(View base) {
messageText = (TextView) base.findViewById(R.id.message);
fromText = (TextView) base.findViewById(R.id.user);
}
以下方法是我将项目添加到列表的地方:
private void addItemsToList() {
sentMessages.clear();
sentMessages.add(localstoragehandler.getUserComments(MessageService.USERNAME, friendUsername()));
messageAdapter.notifyDataSetChanged();
}
当新数据从 Web 服务到达时调用 addItemsToList()。
谢谢
【问题讨论】:
-
因为它不是相同的引用....适配器使用它的(简单版本)副本
-
你的 notifyDataSetChanges 很奇怪,如果需要改变列表中的数据并调用即可,不需要 refreshAdapter
-
我只添加了 refreshAdapter,因为我之前在一篇文章中看到它可能会修复它
-
我已经更新了删除 refreshAdapter 函数的代码。
-
使用 list.invalidateview() 代替 notifydatasetchanged
标签: android listview arraylist notifydatasetchanged