问题
Hi i have an issue where only 1 result is being shown when i call a notifydataSetChanged function. I have read in this forum that the Array list needs to be cleared, then the data needs to be added for the notifydataSetChanged to work properly. I have followed that, but the problem is when the new data arrives it clears all the other data and only shows the latest item from the list. I know its a clear() issue, but i cant work out how to fix it. Any suggestions would be gratefully appreciated.
My Adapter :
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);
}
The following method is where i am adding items to the list :
private void addItemsToList() {
sentMessages.clear();
sentMessages.add(localstoragehandler.getUserComments(MessageService.USERNAME, friendUsername()));
messageAdapter.notifyDataSetChanged();
}
The addItemsToList() is called when new data arrives from the web service.
Thanks
回答1:
What's probably happening is that your list sentMessages
is what you used to initialize your MessageAdapter
, correct? By calling mList.clear()
since it points to the same object as sentMessages
, you are clearing everything from both lists (which is really just the exact same list). What I would do is change your MessageAdapter
constructor to the following:
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);
}
来源:https://stackoverflow.com/questions/30733585/notifydatasetchanged-working-but-only-showing-1-result-in-listview-android