2010-11-29 5 views
3

J'ai un ListView qui énumère un ensemble de livres.
L'utilisateur peut ajouter un nouveau livre et, après cela, l'ensemble des livres s'affiche de nouveau à l'aide de la méthode onActivityResult.Android - Je ne peux pas actualiser/redessiner un ListView

J'ai essayé pendant des heures pour obtenir l'ensemble des livres à actualiser après avoir ajouté un nouveau livre mais sans aucune chance, du tout.

C'est le code que j'ai essayé:

public class BookActivity extends Activity { 

    private ArrayList<Book> books = null; 
    private BookItemAdapter bookItemAdapter; 
    ListView booksSetView = null;  

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     books = new ArrayList<Book>();   
     booksSetView = (ListView)findViewById(R.id.booksSet); 

     Cursor booksCursor = null; 

     booksCursor = getBooksCursor();      
     if (booksCursor.moveToFirst()) 
     { 
      do 
      { 
       books.add(getBookFromCursor(booksCursor));     
      } while(booksCursor.moveToNext()); 
     } 

     bookItemAdapter = new BookItemAdapter(this, R.layout.book_item, books, 0); // BookItemAdapter is a ArrayAdapter   
     booksSetView.setAdapter(bookItemAdapter); 
    } 

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) 
    { 
     super.onActivityResult(requestCode, resultCode, data); 
      Log.e("BOOKS MANAGER", "trying to refresh"); 

     bookItemAdapter.notifyDataSetChanged(); 
     booksSetView.invalidate(); 
     booksSetView.invalidateViews();  
    } 
} 

S'il vous plaît aide.
Merci beaucoup!

Répondre

1

Je ne vois pas où vous mettez à jour les livres ArrayList qui sont les données derrière le ListView. Si vous mettez à jour cet objet dans onActivityResult, cela devrait fonctionner correctement.

0

J'ai eu des problèmes wierd comme celui-ci, alors que ce n'est vraiment pas joli, vous pouvez simplement remplacer notifyDataSetChanged pour le constructeur de l'adaptateur.

@Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) 
    { 
     super.onActivityResult(requestCode, resultCode, data); 
      Log.e("BOOKS MANAGER", "trying to refresh"); 

     bookItemAdapter = new BookItemAdapter(this, R.layout.book_item, books, 0); // BookItemAdapter is a ArrayAdapter   
     booksSetView.setAdapter(bookItemAdapter);  
    } 
+0

ne fonctionne pas pour moi sur Android 1.5 avec le Pulse – dan

5

C'est ce qui fonctionne pour moi

Adapter adapter = list.getAdapter(); 
list.setAdapter(null); 
list.setAdapter(adapter); 

Cela force notifyDataSetChanged pour faire virer et il fonctionne comme un charme!

0
list.setAdapter(list.getAdapter()); 

plus rapide et plus facile solution

Questions connexes