notifydataSetChanged工作但只在listview Android中显示1个结果

时间:2015-06-09 13:34:24

标签: android listview arraylist notifydatasetchanged

我有一个问题,当我调用notifydataSetChanged函数时,只显示了1个结果。我已在本论坛中读到需要清除Array列表,然后需要添加数据以使notifydataSetChanged正常工作。我已经遵循了这一点,但问题是当新数据到达时它会清除所有其他数据并仅显示列表中的最新项目。我知道它是一个明确的()问题,但我无法解决如何解决它。任何建议将不胜感激。

我的适配器:

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()。

由于

1 个答案:

答案 0 :(得分:0)

可能发生的事情是您的列表sentMessages是您用来初始化MessageAdapter的内容,对吗?通过调用mList.clear(),因为它指向与sentMessages相同的对象,您将清除两个列表中的所有内容(实际上只是完全相同的列表)。我要做的是将您的MessageAdapter构造函数更改为以下内容:

public MessageAdapter(Activity context, ArrayList<ArrayList<ReadMessage>> list) {
    mContext = context;
    mList = new ArrayList<ArrayList<ReadMessage>>();
    mList.addAll(list);
    mLayoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}