Autore Topic: Errata valorizzazione ListView tramite CursorAdapter.  (Letto 245 volte)

Offline fiorenzaf

  • Nuovo arrivato
  • *
  • Post: 10
  • I have a dream !!!!
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S4
  • Sistema operativo:
    Windows 10
Errata valorizzazione ListView tramite CursorAdapter.
« il: 20 Ottobre 2015, 13:49:12 CEST »
0
SDK progetto 23, SDK dispositivo 21:

Salve a tutti e grazie anticipatamente, niente sto creando una piccola utility che in pratica usa una Listview personalizzata tramite un CursorAdapter.
In pratica il codice preleva da database i giorni della settimana è se questi erano stati settati ad 1 cambia il colore alla TextView sulla riga della ListView per far capire che è stato selezionato quel dato giorno, mi sa che il problema è nella ridefinizione del BindView dell ' adapter, non lo so ho provato di tutto ma il risultato è del tutto sballato.

Codice (Java): [Seleziona]
@Override
    protected void onResume() {
        super.onResume();

        // Aggancio listview con custom Adapter e custom layout
        listview=(ListView) findViewById(R.id.listView);
        Cursor crs = getContentResolver().query(StatusContract.CONTENT_URI, null, null, null, null);

        // Custom CursorAdapter
        adapter=new CursorAdapter(this, crs, 0)
        {


            @Override
            public View newView(Context ctx, Cursor arg1, ViewGroup arg2)
            {
                View v=getLayoutInflater().inflate(R.layout.listactivity_main_row, null);
                return v;
            }

            @Override
            public void bindView(View v, Context arg1, Cursor crs)
            {
                Log.e(TAG,"Dentro");

                // Assegno i campi di ogni singola riga del database con la listview
                TextView txt_app = (TextView) v.findViewById(R.id.txt_row_evento);
                txt_app.setText(crs.getString(crs.getColumnIndex(StatusContract.Column.NOME_EVENTO)));
                txt_app=(TextView) v.findViewById(R.id.txt_row_ora_inizio);
                txt_app.setText(crs.getString(crs.getColumnIndex(StatusContract.Column.ORA_INIZIO)));
                txt_app=(TextView) v.findViewById(R.id.txt_row_ora_fine);
                txt_app.setText(crs.getString(crs.getColumnIndex(StatusContract.Column.ORA_FINE)));

                TextView chk_app;


                if (crs.getInt(crs.getColumnIndex(StatusContract.Column.G_LU)) == 1) {
                    chk_app = (TextView) v.findViewById(R.id.chk_row_lu);
                    chk_app.setTextColor(Color.RED);
                }


                if (crs.getInt(crs.getColumnIndex(StatusContract.Column.G_MA)) == 1) {
                    chk_app = (TextView) v.findViewById(R.id.chk_row_ma);
                    chk_app.setTextColor(Color.RED);
                }

                if (crs.getInt(crs.getColumnIndex(StatusContract.Column.G_ME)) == 1) {
                    chk_app = (TextView) v.findViewById(R.id.chk_row_me);
                    chk_app.setTextColor(Color.RED);
                }

                if (crs.getInt(crs.getColumnIndex(StatusContract.Column.G_GI)) == 1) {
                    chk_app = (TextView) v.findViewById(R.id.chk_row_gi);
                    chk_app.setTextColor(Color.RED);
                }

                if (crs.getInt(crs.getColumnIndex(StatusContract.Column.G_VE)) == 1) {
                    chk_app = (TextView) v.findViewById(R.id.chk_row_ve);
                    chk_app.setTextColor(Color.RED);
                }

                if (crs.getInt(crs.getColumnIndex(StatusContract.Column.G_SA)) == 1) {
                    chk_app = (TextView) v.findViewById(R.id.chk_row_sa);
                    chk_app.setTextColor(Color.RED);
                }

                if (crs.getInt(crs.getColumnIndex(StatusContract.Column.G_DO)) == 1) {
                    chk_app = (TextView) v.findViewById(R.id.chk_row_do);
                    chk_app.setTextColor(Color.RED);
                }




                ImageButton imgbtn = (ImageButton) v.findViewById(R.id.btn_delete_row);
                imgbtn.setOnClickListener(clickListener);
            }

            @Override
            public long getItemId(int position)
            {
                Cursor crs=adapter.getCursor();
                crs.moveToPosition(position);
                return  crs.getLong(crs.getColumnIndex(StatusContract.Column.ID));
            }
        };

Questi sono i dati di input del database:

Codice: [Seleziona]
L M M G V S D
1|0|0|1|0|1|0
0|1|0|0|0|1|0
0|0|0|0|0|0|0
0|0|0|0|1|0|0
0|0|0|0|0|1|0
0|0|0|0|0|0|0
0|1|0|1|0|0|0

Questo è il risultato:
https://drive.google.com/open?id=0B8ZjfYpiDR3qczVuS0pTUDFtMjQ

Da come si vede in figura la prima riga è totalmente sballata !!!!!

Ho provato in pratica su quasi tutte le versione del sdk partendo dalla 10, ma niente nn riesco a capire, e come sè i campi si sporcassero durante l'esecuzione, quello che ho notato è che la funzione BindView viene richiamata, ad esempio per 7 record in database, quasi 70 volte !!!!
Spero di essere stato il piu chiaro possibile, se cosi non fosse sono a vostra disposizione!!!!

Ciao.