Pregunta

Tienes un problema. En mi actividad principal tengo un ListView. Y necesito actualizarlo cada vez que regrese a esta actividad. Utilizo el método onResume () para esto:

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

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

Como puede ver, uso un adaptador refrescante extendido desde ArrayAdapter para cambiar datos en ListView.

Pero en algunos casos necesito desplazar esta lista hasta el final, por ejemplo. cuando le agrego un nuevo elemento. Y uso el método onActivityResult (...) para esto:

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

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

Pero tengo un problema. Cuando agrego un nuevo elemento a mi lista, ambos métodos se ejecutan en orden onActivityResult (...) y después de eso onResume (). Y tengo:

  1. Enumere los datos actualizados a veces con refreshCategoriesList () (pero no es el problema principal);
  2. Después de ejecutar onResume (), se desplazó a la lista final restaurada a la posición del primer elemento :( Es un problema. Porque cuando agrego un nuevo elemento, quiero desplazar la lista hasta el final.

¿Cómo puedo resolver este problema? ¿Puedo en algunos casos llamar solo al método onActivityResult (...) (cuando necesito desplazar la lista) y en otro método onResume () (cuando simplemente quiero actualizar los datos de la lista)?

¿Fue útil?

Solución

Puede usar el método notifyDataSetChanged () de ArrayAdapter en lugar de volver a crear el adaptador cada vez.

private void refreshCategoriesList() {
    categoriesListAdapter.notifyDataSetChanged();
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top