这种行为是不正常的。没有看到你的代码,我可以建议如下:
1)你不是从UI线程调用notifyDataSetChanged()。正确的方法:
runOnUiThread(new Runnable() {
public void run() {
adapter.notifyDataSetChanged();
}
});
2)你不小心或不打电话给adapter.notifyDataSetInvalidated();
3)在适配器中,覆盖adapter.notifyDataSetChanged();方法和添加说明转到顶部
4)如果您正在使用列表来填充适配器,则每次都提供新列表,因此适配器设置将被刷新。您应该始终提供相同的列表。但是您可以根据需要进行更改。如果要重置列表,请使用list.clear而不是list = new ArrayList();
以下是我的适配器示例:
public class Adapter extends BaseAdapter {
private Activity activity;
private ArrayList> data;
private static LayoutInflater inflater = null;
public ImageLoader imageLoader;
public MediaItemAdapter(Activity a, ArrayList> d) {
activity = a;
data = d;
inflater = (LayoutInflater) activity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
imageLoader = new ImageLoader(activity.getApplicationContext());
}
public int getCount() {
return data.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
View vi = convertView;
if (convertView == null) {
vi = inflater.inflate(R.layout.item_composer, null);
}
TextView title = (TextView) vi.findViewById(R.id.item_title); // title
TextView price = (TextView) vi.findViewById(R.id.price);
return vi;
}
}
呼叫适配器
List myList = new ArrayList>();
Adapter ma = new Adapter(this, myList);
适配器初始化之前,myList可以为空。
然后用我的列表做一些操作:
myList.add(someElement);
ma.notifyDataSetChanged();
如果您需要删除所有项目:
myList.clear();
ma.notifyDataSetChanged();
这样的实现是无止境的,我看到超过15000个元素没有任何问题。