8

L'app contiene dati in un database SQLite. L'interfaccia utente è principalmente un RecyclerView. La domanda è: come trasferire i dati dal database nell'interfaccia utente, mantenendo il thread principale?Dati SQLite su RecyclerView

ho in mente di utilizzare un CursorLoader, ContentProvider e RecyclerView. Ma leggendo in giro sembra che RecyclerView non abbia un supporto immediato per i dati forniti dal Cursore. Dang.

Che poi mi lascia con poche altre opzioni ...

  1. AsyncTask per caricare i dati, ha messo in oggetti del modello, e passano nel adattatore RecyclerView. A parte essere brutto, non è amichevole con la configurazione.

  2. Un Loader personalizzato che carica i dati da SQL e lo spinge in oggetti del modello.

  3. Utilizzare un caricatore cursore, e quando ritorna il cursore scorrere per spingere i dati in oggetti del modello. Sospetto che ciò si verifichi sul thread principale e potrebbe danneggiare le prestazioni.

  4. Usa Otto per inviare un messaggio di richiesta per richiedere dati, e poi tornare un modello insieme di oggetti dal messaggio di ritorno. Ci possono essere ~ 500 oggetti quindi penso che potrei piuttosto abusare di Otto facendo questo.

Se sto usando una collezione di modello di oggetti, invece di un cursore che vedo meno beneficio per un ContentProvider, e ho anche perdere la capacità per l'interfaccia utente di aggiornamento automatico su modifiche dei dati (che può essere utile) .

Nessuna di queste opzioni fa molto appello, c'è un modo migliore? L'app è sotto pressione, quindi tutto ciò che deve essere abbastanza veloce da implementare. Sfortunatamente l'interfaccia utente deve scorrere orizzontalmente e solo obiettivi Lollipop, quindi RecyclerView sembra una scommessa migliore di ListView.

+0

Uso il metodo 3 in una delle mie app e nel file onLoadFinished creo un nuovo thread per creare gli oggetti del modello dai dati. Non ho avuto un problema con questo metodo ancora – tyczj

+1

Vedi https://gist.github.com/Shywim/127f207e7248fe48400b e prego non iterare sopra il cursore, ha poco senso e, come lei ha detto che degrada le prestazioni – pskink

+0

non è vero essere in grado di prendere il cursore e inserirlo in un compito diverso? Ancora non desiderabile, naturalmente. –

risposta

5

utilizzare questo semplice adattatore https://gist.github.com/Shywim/127f207e7248fe48400b, in alternativa è possibile utilizzare android.support.v17.leanback.widget.ItemBridgeAdapter con android.support.v17.leanback.widget.CursorObjectAdapter ma perché per rendere la propria vita più difficile?