Ответ 1
Такое поведение ненормально. Не видя кода, я могу предложить следующее:
1) Вы не вызываете 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<HashMap<String, String>> data;
private static LayoutInflater inflater = null;
public ImageLoader imageLoader;
public MediaItemAdapter(Activity a, ArrayList<HashMap<String, String>> 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<HashMap<String, String>>();
Adapter ma = new Adapter(this, myList);
myList может быть пуст до инициализации адаптера.
Затем выполните некоторую операцию с моим списком:
myList.add(someElement);
ma.notifyDataSetChanged();
если вам нужно удалить все элементы:
myList.clear();
ma.notifyDataSetChanged();
Такая реализация довольно бесконечна, я видел более 15 тысяч элементов без каких-либо проблем.