FilterQueryProvider, filter e ListView

Ho un database come segue:

------------------------------ BOOK NAME | BOOK FORMAT | COUNT | ------------------------------ Android | HTML | 1 WPF | PDF | 10 Symbian | PS | 2 Windows | HTML | 2 

Sto mostrando questo database all'utente utilizzando un CustomSimpleCursorAdapter.

  • ListView evidenzia il massimo sulla scorrimento
  • Come protetto le autorizzazioni di file in un progetto esterno personalizzato aggiunto a Android AOSP?
  • Come creare un RelativeLayout in modo programmato con due pulsanti uno sopra l'altro?
  • Android: AsyncTask ProgressDialog non si apre in ActivityGroup
  • assicurando la connessione al server php
  • Messaggi persi su XMPP sul dispositivo scollegato
  •  CustomSimpleCursorAdapter extends SimpleCursorAdapter 

    Impianti filtrabili

    con getView() e runQueryonBackgroundThread() vengono sovrascritti.
    La vista Griglia dei libri è correttamente mostrata.

    L'utente dispone delle seguenti opzioni:

    HTML | PDF | PS | ELIMINA

     Constraint: BOOK FORMAT [HTML - 1, PDF - 2, PS - 3] 

    Quando l'utente preme l'opzione di menu HTML, i libri con il tipo HTML devono essere visualizzati.

    all'interno del gestore MenuOption (), ho scritto quanto segue:

     adapter.getFilter().filter("1"); runQueryonBackgroundThread() { if(mCursor != null) mCursor.close(); mCursor = query(using the constraint) return mCursor; } 

    Questo vincolo raggiunge il mio metodo runQueryonBackgroundThread() override. Ma la sua non aggiorna la vista di griglia e lancia un'exception.

    "FILTRO: android.view.ViewRoot $ CalledFromWrongThreadException: solo il thread originale che ha creato una gerarchia di visualizzazione può toccare le sue viste"

    Mi aiuti per favore.

    One Solution collect form web for “FilterQueryProvider, filter e ListView”

    Penso che tu abbia messo le cose un po '. In realtà SimpleCursorAdapter implementa già SimpleCursorAdapter , quindi non c'è bisogno di reimplementare. Invece nella tua attività di ListActivity usare smth come questo:

     private void filterList(CharSequence constraint) { final YourListCursorAdapter adapter = (YourListCursorAdapter) getListAdapter(); final Cursor oldCursor = adapter.getCursor(); adapter.setFilterQueryProvider(filterQueryProvider); adapter.getFilter().filter(constraint, new FilterListener() { public void onFilterComplete(int count) { // assuming your activity manages the Cursor // (which is a recommended way) stopManagingCursor(oldCursor); final Cursor newCursor = adapter.getCursor(); startManagingCursor(newCursor); // safely close the oldCursor if (oldCursor != null && !oldCursor.isClosed()) { oldCursor.close(); } } }); } private FilterQueryProvider filterQueryProvider = new FilterQueryProvider() { public Cursor runQuery(CharSequence constraint) { // assuming you have your custom DBHelper instance // ready to execute the DB request return dbHelper.getListCursor(constraint); } }; 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.