Frage

Haben Sie ein Problem. In meiner Hauptaktion habe ich ein ListView. Und ich muss es jedes Mal aktualisieren, wenn ich zu dieser Aktivität zurückgekehrt bin. Ich verwende die onResume () Methode dafür:

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

private void refreshCategoriesList() {
        // ...
        categoriesListAdapter = new CategoryListItemAdapter(
            this, R.layout.category_item,
            categories
        );
        categoriesListView.setAdapter(categoriesListAdapter);
}
Sebastian Wie Sie sehen, verwende ich den von ArrayAdapter erweiterten Aktualisierungsadapter zum Ändern von Daten in ListView.

Aber in einigen Fällen muss ich diese Liste zum Ende scrollen, zum Beispiel. wenn ich einen neuen Artikel hinzufüge. Und ich benutze die onActivityResult (...) Methode dafür:

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

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

  1. Listet Daten auf, die mit RefrCategoriesList () auf Zeiten aktualisiert wurden (dies ist jedoch kein Hauptproblem);
  2. Nach dem Ausführen von onResume () wurde zur Endliste gescrollt, die an der ersten Elementposition wiederhergestellt wurde :( Dies ist ein Problem. Wenn ich ein neues Element hinzufüge, möchte ich eine Bildlaufliste am Ende.
War es hilfreich?

Lösung

Sie können die notifyDataSetChanged () -Methode von ArrayAdapter verwenden, anstatt den Adapter jedes Mal neu zu erstellen.

private void refreshCategoriesList() {
    categoriesListAdapter.notifyDataSetChanged();
}

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top