Tale comportamento non è normale. Senza vedere il tuo codice, posso suggerire quanto segue:
1) Non stai chiamando notifyDataSetChanged()
dal thread dell'interfaccia utente. Il modo corretto:
runOnUiThread(new Runnable() {
public void run() {
adapter.notifyDataSetChanged();
}
});
2) È accidentalmente o non stanno facendo una chiamata a adapter.notifyDataSetInvalidated();
3) Nella scheda si override del metodo adapter.notifyDataSetChanged();
e ha aggiunto le istruzioni per tornare all'inizio
4) Se si utilizza un elenco per popolare l'adattatore, si fornisce ogni volta un nuovo elenco, quindi le impostazioni dell'adattatore vengono aggiornate. Dovresti sempre fornire la stessa lista. Comunque puoi cambiarlo quanto vuoi. Se si sta reimpostando l'uso lista list.clear
invece di list = new ArrayList();
Ecco un esempio del mio adattatore:
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;
}
}
Invito a adattatore:
List myList = new ArrayList<HashMap<String, String>>();
Adapter ma = new Adapter(this, myList);
myList può essere vuoto prima dell'inizializzazione adattatore.
Poi fare qualche operazione con la mia lista:
myList.add(someElement);
ma.notifyDataSetChanged();
se è necessario eliminare tutti gli elementi:
myList.clear();
ma.notifyDataSetChanged();
Tale implementazione è abbastanza senza fine, ho visto più di 15 mila elementi senza alcun problema.
puoi pubblicare il tuo codice completo? – yfsx