Android: come utilizzare CursorAdapter?

Ho un database, un ListView e un CustomCursorAdapter che estende CursorAdapter . Un button di menu aggiunge un elemento al database. Voglio che il ListView aggiornato e mostrato questa modifica. Normalmente non mostra questo nuovo elemento finché non vado alla home screen e riapri l'applicazione.

Ho finalmente fatto funzionare chiamando cursor.requery() o mCustomCursorAdapter.changeCursor(newCursor) each volta che ho aggiunto un nuovo elemento, ma quando ho impostato autoRequery su false nel constructor di CursorAdapter , ho funzionato allo stesso modo. Perché viene aggiornato correttamente quando l'autoRequery è impostato su false?

  • ADB Ricevi broadcast BOOT_COMPLETE
  • Android: Allarme multiplo non funziona
  • Android - Google Spreadsheet Api
  • Come posso get il nome del pacchetto in android?
  • In Android, come posso visualizzare un selettore delle applicazioni in base al tipo di file?
  • Edizione di Android SDK e AVD Manager
  • Sto usando correttamente CursorAdapter ? Qual è il modo standard per mantenere aggiornato l'elenco con il database? E che cosa fa l'autoRequery?

  • Come posso ottimizzare questo codice che contiene una linea ripetitiva?
  • Come hide un elemento da Recycler View in una determinata condizione?
  • Libreria PDF per Android - PDFBox?
  • Alternativa deprecata BitmapDrawable
  • PhoneGap - La costruzione di phonegap android app fornisce errori di compilazione su Linux
  • listview non aggiornare con notifydatasetchanged () chiamata
  • 2 Solutions collect form web for “Android: come utilizzare CursorAdapter?”

    Il modo idiomatico e imo corretto per aggiornare automaticamente Cursor s è call Cursor#setNotificationUri quando vengono creati e prima di essere consegnati a qualunque cosa li ha richiesti. Quindi chiamate ContentResolver#notifyChange quando qualsiasi cosa ContentResolver#notifyChange nello spazio dei nomi di Uri di Cursor .

    Ad esempio, supponiamo che stai creando un'applicazione di posta semplice e volevi aggiornare quando è arrivata una nuova posta, ma anche fornire diverse viste sulla posta. Avrei definito alcuni Uri fondamentali.

     content://org.example/all_mail content://org.example/labels content://org.example/messages 

    Ora, dico che volevo get un cursore che mi ha dato tutta la posta e sia aggiornato quando arriva una nuova posta:

     Cursor c; //code to get data c.setNotificationUri(getContentResolver(), Uri.parse("content://org.example/all_mail"); 

    Ora arriva la nuova posta in modo da notificare:

     //Do stuff to store in database getContentResolver().notifyChange(Uri.parse("content://org.example/all_mail", null); 

    Dovrei anche avvisare tutti i Cursor s selezionati per le etichette che questo nuovo messaggio è stato incontrato

     for(String label : message.getLabels() { getContentResolver().notifyChange(Uri.parse("content://org.example/lables/" + label, null); } 

    E anche, forse un cursore sta visualizzando un messaggio specifico in modo da notificarli anche:

     getContentResolver().notifyChange(Uri.parse("content://org.example/messages/" + message.getMessageId(), null); 

    Le chiamate getContentResolver() verificano in cui si accede ai dati. Quindi, se è in un Service o ContentProvider è where si setNotificationUri e notifyChange . Non dovresti farlo da where si accede ai dati, ad esempio un'attività.

    AlarmProvider è un ContentProvider semplice che utilizza questo metodo per aggiornare Cursor s.

    Ho creato il metodo successivo per l'aggiornamento di ListView:

     /** * Method of refreshing Cursor, Adapter and ListView after database * changing */ public void refreshListView() { databaseCursor = db.getReadableDatabase().query( CurrentTableName, null, null, null, null, null, "title"+SortingOrder); databaseListAdapter = new DomainAdapter(this, android.R.layout.simple_list_item_2, databaseCursor, new String[] {"title", "description"}, new int[] { android.R.id.text1, android.R.id.text2 }); databaseListAdapter.notifyDataSetChanged(); DomainView.setAdapter(databaseListAdapter); } 

    lo chiama each volta dopo qualche cambiamento nel database

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.