Ho un BaseAdapter personalizzato e un pulsante Aggiungi nell'attività principale. Il pulsante apre una finestra di dialogo con una casella di testo e puoi aggiungere nuovi elementi all'elenco in questo modo. Il problema è che la lista non è aggiornata. Nella funzione onActivityResult() stampo il numero di elementi nell'elenco e ogni volta che clicco OK nella finestra di dialogo il numero aumenta, quindi so che è solo il refresh che non funziona. La mia BaseAdapter e la mia attività:Android: ListView non si aggiorna su notifyDataSetChanged();
class ListaOrase extends BaseAdapter{
private Activity context;
ArrayList<String> orase;
public ListaOrase(Activity context){
this.context=context;
orase=new ArrayList<String>();
}
public void add(String string){
orase.add(string);
this.notifyDataSetChanged();
}
public View getView (int position, View convertView, ViewGroup list) {
View element;
if (convertView == null)
{
LayoutInflater inflater = context.getLayoutInflater();
element = inflater.inflate(R.layout.lista, null);
}
else element = convertView;
TextView elementLista=(TextView)element.findViewById(R.id.elementLista);
elementLista.setText(orase.get(position));
return element;
}
}
public class WeatherAppActivity extends ListActivity {
Button buton;
ListaOrase lista;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
lista=new ListaOrase(this);
buton=(Button)findViewById(R.id.buton);
lista.add("Bucuresti");
lista.add("Sibiu");
setListAdapter(lista);
}
public void add(View view){
Intent intent=new Intent();
intent.setClass(this, Adauga.class);
startActivityForResult(intent, 0);
}
public void onActivityResult (int requestCode, int responseCode, Intent data){
System.out.println("Apelata");
if(responseCode==1){
lista.add(data.getStringExtra("oras")); // e chiar getText()
System.out.println(lista.getCount());
lista.notifyDataSetChanged();
}
}
}
Come potete vedere, sto cercando di aggiornare (notifyDataSetChanged();) sia quando si aggiunge un nuovo elemento (nella classe che estende BaseAdapter) e nel metodo onActivityResult, dopo la la finestra di dialogo passa il nuovo elemento all'attività principale. Ripeto, l'elemento viene aggiunto alla lista perché il conteggio aumenta, semplicemente non si aggiorna.
Grazie per le vostre risposte!
Perché non si chiama setListAdapter (lista); in OnActivityResult – Abhi
Fa il lavoro, ma gli articoli sono nulli. LogCat dice che l'elenco richiede una stringa ma ottiene una SpannableString. Cos'è e come posso liberarmene? Viene ottenuto dalla finestra di dialogo tramite un Intento. – FloIancu
Ho aggiunto del codice alla mia risposta, ho cambiato il codice correggendo alcune cose e semplificando l'uso di un adattatore di array, ci sono un paio di piccoli cambiamenti molto importanti da seguire, spero che ti aiuteranno, fammi sapere! – gwa