JavascriptProva

sabato 5 novembre 2016

Ripasso del CursorAdapter per collegare una ListView a una tabella di database.

Il CursorAdapter avrebbe un metodo newView che non sarebbe altro che l'inflatazione del nuovo Layout, come ArrayAdapter.
La differenza potrebbe stare nel fatto che mentre nell'ArrayAdapter il metodo getView fa tutto lui, nel CursorAdapter la view viene inflatata da newView e poi in essa vengono messi i dati tramite bindView.
Vediamo un po' i parametri dei due metodi.

Sì, credo di essere in grado di provare...

Iniziamo estendendo CursorAdapter.
    class MyCursorAdapter extends CursorAdapter {

        Context context;
        public MyCursorAdapter(Context context, Cursor c) {
            super(context, c);
            this.context=context;
        }

        @Override
        public View newView(Context context, Cursor cursor, ViewGroup parent) {
            LayoutInflater layoutInflater=(LayoutInflater)context.getSystemService(LAYOUT_INFLATER_SERVICE);
            return layoutInflater.inflate(R.layout.row,null);
        }

        @Override
        public void bindView(View view, Context context, Cursor cursor) {

            TextView textView=(TextView)view.findViewById(R.id.textView);
            Button button=(Button)view.findViewById(R.id.button2);
            textView.setText(cursor.getString(cursor.getColumnIndexOrThrow("voce")));
        }
    }
E l'ho sperimentato: ecco tutto il codice:
public class Lista extends AppCompatActivity {

    Helper helper;
    MyCursorAdapter myCursorAdapter;
    ListView listView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_lista);

        helper=new Helper(this);
        Cursor crs=helper.query();
        myCursorAdapter=new MyCursorAdapter(this,crs);
        listView=(ListView)findViewById(R.id.listView);
        listView.setAdapter(myCursorAdapter);





    }

    @Override
    protected void onStop(){
        super.onStop();

        Intent intent=new Intent(Lista.this,Lista.class);
        PendingIntent pendingIntent=PendingIntent.getActivity(getApplicationContext(),0,intent,0);
        AlarmManager alarmManager=(AlarmManager) getApplicationContext().getSystemService(ALARM_SERVICE);
        alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime()+5*1000,pendingIntent);

    }

    class MyCursorAdapter extends CursorAdapter {

        Context context;
        public MyCursorAdapter(Context context, Cursor c) {
            super(context, c);
            this.context=context;
        }

        @Override
        public View newView(Context context, Cursor cursor, ViewGroup parent) {
            LayoutInflater layoutInflater=(LayoutInflater)context.getSystemService(LAYOUT_INFLATER_SERVICE);
            return layoutInflater.inflate(R.layout.row,null);
        }

        @Override
        public void bindView(View view, Context context, Cursor cursor) {

            TextView textView=(TextView)view.findViewById(R.id.textView);
            Button button=(Button)view.findViewById(R.id.button2);
            textView.setText(cursor.getString(cursor.getColumnIndexOrThrow("voce")));
        }
    }



}
Funziona perfettamente!

Nessun commento:

Posta un commento