【发布时间】:2015-08-06 06:12:01
【问题描述】:
我有一个自定义数组适配器,并且随着新数据进入列表视图,它会不断增长。但是,当我使用 adapter.add 将新数据添加到底层适配器然后调用 notifyDataSetChanged() 时,适配器会更新,但不会像我期望的那样自动刷新。它仅在我尝试滚动时刷新。我希望列表视图自动刷新。我一直在到处寻找,它告诉我使用 notifysetdatachanged。我哪里做错了?
下面是我的代码:
class MyArrayAdapter extends ArrayAdapter {
public MyArrayAdapter(Context context) {
super(context, R.layout.chat_list, messages);
}
// @Override
public View getView(int position, View convertView, ArrayList<String> messages, ViewGroup parent) {
final Viewholder viewholder;
if(convertView == null)
{
LayoutInflater inflater = (LayoutInflater) this.getContext().getSystemService(LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.chat_list, parent, false);
viewholder = new Viewholder();
viewholder.message = (TextView) convertView.findViewById(R.id.text1);
convertView.setTag(viewholder);
}
else {
viewholder = (Viewholder) convertView.getTag();
}
viewholder.message.setText(chat.messages.get(position).toString());
return convertView;
}
@Override
public int getCount() {
return messages.size();
}
}
static class Viewholder
{
TextView message;
}
另一个我称之为datachanged的sn-p:
Message new_message = (Message) packet;
if(new_message.getBody() != null)
{
Log.v("LogCat", "Message Received from " + new_message.getFrom() + " and as " + new_message.getBody());
messages.add("From: " + new_message.getFrom().toString());
messages.add(new_message.getBody());
myadapter.add(new_message.getFrom().toString()); // i also tried to disable this.. dint work
myadapter.add(new_message.getBody());
mHandler.post(new Runnable() {
@Override
public void run() {
myadapter.notifyDataSetChanged();
}
});
}
}
【问题讨论】:
-
ArrayAdapter#add已经调用了notifyDataSetChanged,不需要,你可以通过调用ArrayAdapter#setNotifyOnChange来禁用它 -
谢谢.. 我会删除那行。但是自动刷新呢。
标签: android listview android-arrayadapter