Domanda

Hai un problema. Nella mia attività principale ho un ListView. E devo aggiornarlo ogni volta che torno a questa attività. Uso il metodo onResume () per questo:

@Override
protected void onResume() {
    super.onResume();
    refreshCategoriesList();
}

private void refreshCategoriesList() {
        // ...
        categoriesListAdapter = new CategoryListItemAdapter(
            this, R.layout.category_item,
            categories
        );
        categoriesListView.setAdapter(categoriesListAdapter);
}

Come puoi vedere, utilizzo un adattatore di aggiornamento esteso da ArrayAdapter per modificare i dati in ListView.

Ma in alcuni casi ho bisogno di scorrere questo elenco fino alla fine, ad es. quando aggiungo un nuovo elemento. E uso il metodo onActivityResult (...) per questo:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        // ...
        refreshCategoriesList();

        categoriesListView.setSelection(categoriesListAdapter.getCount() - 1);
}

Ma ho un problema. Quando aggiungo un nuovo elemento alla mia lista, entrambi i metodi vengono eseguiti in ordine suActivityResult (...) e successivamente suResume (). E ho:

  1. Elenca i dati aggiornati a volte con refreshCategoriesList () (ma non è un problema principale);
  2. Dopo l'esecuzione di onResume (), lo scorrimento fino alla fine dell'elenco è stato ripristinato alla posizione del primo elemento :( È un problema. Perché quando aggiungo un nuovo elemento voglio scorrere l'elenco fino alla fine.

Come posso risolvere questo problema. In alcuni casi posso chiamare solo il metodo onActivityResult (...) (quando ho bisogno di scorrere l'elenco) e in altri metodi onResume () (quando voglio semplicemente aggiornare i dati dell'elenco)?

È stato utile?

Soluzione

È possibile utilizzare il metodo notifyDataSetChanged () da ArrayAdapter invece di ricreare l'adattatore ogni volta.

private void refreshCategoriesList() {
    categoriesListAdapter.notifyDataSetChanged();
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top