Autore Topic: CursorLoader e Custom Adapter  (Letto 328 volte)

Offline Ndrocchietto

  • Nuovo arrivato
  • *
  • Post: 5
  • Respect: 0
    • Mostra profilo
CursorLoader e Custom Adapter
« il: 05 Maggio 2015, 12:54:42 CEST »
0

edit risolto! ho messo l ultimo snippet sul custom adapter in loaderFinished, e funziona


------------
Carissimi, che meraviglia avere trovato questo forum, spero di essere  un contribuente costante.

Dunque fornisco qualche snippet che dovrebbe essere abbastanza

PROBLEMA
nel mio programma ho costruito una todo list con un content provider che interroga SQLite  piazzando un CursorLoader per il metodo query( non sono sicuro se vada piazziato anche per gli altri CRUD, ma non importa), una volta ritornato il risultato ho in onCreateView nel fragment ho un meraviglioso SimpleCursorAdapter che funziona a meraviglia.
 
la sfida nasce nel moment in cui ho bisogno al click della list view di passare una row piu' grande che ha un layout apposito,
per fare questo ho bisogno di combinare al CursorLoader un CustomAdapter, ma non ci riesco.

i miei Loader sono chiamati da un initLoader ed hanno questa struttura
Codice (Java): [Seleziona]
   @Override
    public Loader<Cursor> onCreateLoader(int id, Bundle args) {
        Toast.makeText(getActivity(),"id is:"+id,Toast.LENGTH_LONG).show();

        if (id==0) {
//            String[] selection ={UcanContract.Tasks._ID,UcanContract.Tasks.COLUMN_TASKS};
//
//        CursorLoader cursorLoader = new CursorLoader(getActivity(), UcanContentProvider.CONTENT_URI,selection, null,null,null);

            cl = new CursorLoader(getActivity(), UcanContentProvider.CONTENT_URI, null, null, null, null);




        }else if(id==1){

            String selection= UcanContract.Tasks.COLUMN_URGENCY+"=0";
            cl = new CursorLoader(getActivity(), UcanContentProvider.CONTENT_URI, null, selection, null, null);

        }
     return cl;
 }

    @Override
    public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
myCursorAdapter.swapCursor(data);
    }

    @Override
    public void onLoaderReset(Loader<Cursor> loader) {
myCursorAdapter.swapCursor(null);
    }

}

Ora per creare un Customer Adapter ho creato questa classe

Codice (Java): [Seleziona]
public class CustomViewAdapter extends CursorAdapter {

   public CustomViewAdapter(Context context,Cursor c, int flag){
        super( context, c, flag);

    }
    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {
return LayoutInflater.from(context).inflate(R.layout.textview_pretty_cool2_layout, parent, false);


    }

    @Override
    public void bindView(View view, Context context, Cursor cursor) {
//TODO qua devo mettere credo  i findViewbyid per linkare xml al codice ed iniziare la recursione, in pratica
credo che qua vadano gli argomenti from, to che passavo al Simple Adapter
    }
}

che non riesco a richiamare, poiche' al posto del Simple Adapter( che notate ha un argomento cursor nullo in quanto ci sta un Loader caricato..!)

cosa devo passare per sostituire  questo?


Codice (Java): [Seleziona]
        String[] fromFieldNames = new String[]{UcanContract.Tasks.COLUMN_URGENCY,UcanContract.Tasks.COLUMN_TASKS};
    int[] toViewId = new int[]{R.id.urgent_finger,R.id.text_v1};


   myCursorAdapter=new SimpleCursorAdapter(getActivity(),R.layout.textview_pretty_cool2_layout,null,fromFieldNames,toViewId,0);
    listView.setAdapter(myCursorAdapter);


ho pensato

Codice (Java): [Seleziona]
CustomViewAdapter cVA = new CustomViewAdapter(getActivity(),[color=red]cursore[/color],0);
        listView.setAdapter(cVA);

a questo, ma da dove prendo il cursore (segnato in rosso sopra, in quanto non riconosciuto come argomento ovviamente perche' non so da dove prenderlo)considerando che ho un CursorLoader e non un cursore?
ed anche se prendessi il cursore che mi viene ritornato dal  ContentProvider non avrebbe senso, in quanto c'e' un loader che lo maneggia,
quindi come da titolo come faccio a combinare un Cursor Loader con un Custom Adapter, ho provato a fare dei cast ma il compiler mi lancia throw class exception


Per piacere considerate pure che sto assumedo che nel Custom Adapter class che extends CursorLoader, sotto bind vadano fissati gli argomenti che vengono ricorsi da il cursore all'adapter per popolare( non so se si puo' dire in italiano) la listview

GRAZIE


« Ultima modifica: 05 Maggio 2015, 23:48:04 CEST da Ndrocchietto »