Autore Topic: colorare il testo di una listview in base ai dati  (Letto 657 volte)

Offline daniweb

  • Nuovo arrivato
  • *
  • Post: 30
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    galaxy s2
  • Sistema operativo:
    windows 7
colorare il testo di una listview in base ai dati
« il: 29 Marzo 2013, 13:22:31 CET »
0
Ciao a tutti ,
sto cercando di avere un testo colorato in base al dato contenuto nel db.
in pratica il dato dovrebbe comparire con un colore differente se è stato modificato almeno una volta.

attualmente il testo viene colorato, ma la riga visualizza il riferimento dell'id anzichè il testo prelevato dal DB.
ad esempio.

10 - test
diventa
codice - descrizione

cosa sto sbagliando?

questo è l'xml
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   tools:context=".OpenNotes" >

    <LinearLayout
       android:layout_width="0dp"
       android:layout_height="0dp"
       android:focusable="true"
       android:focusableInTouchMode="true" />

    <RelativeLayout
       android:id="@+id/linearLayout1"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:layout_alignParentLeft="true"
       android:layout_alignParentRight="true"
       android:layout_alignParentTop="true"
       android:layout_marginTop="10dp"
       android:orientation="horizontal" >

        <TextView
           android:id="@+id/listaProgetti"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:shadowColor="#333333"
           android:shadowDx="2.0"
           android:shadowDy="2.0"
           android:shadowRadius="3.0"
           android:text="@string/listaBeni"
           android:textSize="30dp" />

        <ImageButton
           android:id="@+id/aggiungi"
           android:layout_toRightOf="@id/listaProgetti"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:contentDescription="@string/addStabilimenti"
           android:src="@android:drawable/ic_input_add" />
        <ImageButton
           android:id="@+id/camera"
           android:layout_alignParentRight="true"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:contentDescription="@string/addStabilimenti"
           android:src="@android:drawable/ic_menu_camera" />

    </RelativeLayout>

    <LinearLayout
       xmlns:android="http://schemas.android.com/apk/res/android"
       android:layout_width="fill_parent"
       android:layout_height="fill_parent"
       android:layout_below="@id/listaProgetti"
       android:layout_marginTop="150dp" >

        <ListView
           android:id="@+id/android:list"
           android:layout_width="fill_parent"
           android:layout_height="fill_parent" />

        <TextView
           android:id="@+id/android:empty"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text="NESSUN BENE PRESENTE" />
    </LinearLayout>

    <EditText
       android:id="@+id/search_box"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:layout_alignParentLeft="true"
       android:layout_below="@+id/linearLayout1"
       android:layout_marginTop="29dp"
       android:ems="10"
       android:hint="scrivi per filtrare"
       android:inputType="text"
       android:maxLines="1" >
    </EditText>

</RelativeLayout>
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
   xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">   
        <TextView
            android:id="@+id/codice"
            android:layout_width="wrap_content"
            android:text="codice"
            android:layout_alignParentLeft="true"
                android:layout_height="wrap_content"           
                android:textSize="20sp" />
        <TextView
            android:id="@+id/txt2"
            android:layout_width="wrap_content"
            android:text="-"
                android:layout_height="wrap_content"           
                android:textSize="20sp"
                android:layout_toRightOf="@id/codice"
                android:layout_alignParentTop="true" />
        <TextView
            android:id="@+id/descrizione"
            android:layout_width="fill_parent"
            android:text="descrizione"
                android:layout_height="wrap_content"           
                android:textSize="20sp"
                android:layout_toRightOf="@id/txt2"
                android:layout_alignParentTop="true" />
        <TextView
            android:id="@+id/tab1"
            android:layout_width="wrap_content"
                android:layout_height="wrap_content"           
                android:textSize="18sp"
                android:layout_below="@id/codice"
                android:layout_alignParentBottom="true"/>
        <TextView
            android:id="@+id/costruttore"
            android:layout_width="wrap_content"
                android:layout_height="wrap_content"           
                android:textSize="18sp"
                android:layout_toRightOf="@id/tab1"
                android:layout_alignParentBottom="true"/>
        <TextView
            android:id="@+id/tab2"
            android:layout_width="wrap_content"
                android:layout_height="wrap_content"           
                android:textSize="18sp"
                android:layout_marginLeft="15dp"
                android:layout_toRightOf="@id/costruttore"
                android:layout_alignParentBottom="true" />
        <TextView
            android:id="@+id/modello"
            android:layout_width="fill_parent"
                android:layout_height="wrap_content"           
                android:textSize="18sp"
                android:layout_marginLeft="15dp"
                android:layout_toRightOf="@id/tab2"
                android:layout_alignParentBottom="true" />
</RelativeLayout>



questo è il codice che uso
Codice (Java): [Seleziona]
private void fillData(long ProgettoID, Editable filterText) {
                mStabCursor = mDbHelper.fetchAllBeni(ProgettoID, filterText);
        startManagingCursor(mStabCursor);
        String[] from = new String[]{BeneTable.CODICE, BeneTable.DESCRI};
        int[] to = new int[]{R.id.codice, R.id.descrizione};  
 
        SimpleCursorAdapter Beni = new SimpleCursorAdapter(this, R.layout.row_beni, mStabCursor, from, to);
        Beni.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
               
                @Override
                public boolean setViewValue(View view, Cursor cursor, int columnIndex){    
                    final int modificato = cursor.getColumnIndex(BeneTable.MODIFICA);
                    final int modifica = cursor.getInt(modificato);
                    if( modifica==1)
                    {
                        ((TextView) view).setTextColor(Color.RED);
                        return true;
                    }
                    return false;
                }
        });
        setListAdapter(Beni);
        registerForContextMenu(getListView());
    }

Post unito: 29 Marzo 2013, 13:25:09 CET
ok, ho risolto.

ho eliminato il

return true
da

Codice (Java): [Seleziona]
@Override
                public boolean setViewValue(View view, Cursor cursor, int columnIndex){    
                    final int modificato = cursor.getColumnIndex(BeneTable.MODIFICA);
                    final int modifica = cursor.getInt(modificato);
                    if( modifica==1)
                    {
                        ((TextView) view).setTextColor(Color.RED);
                        return true;
                    }
                    return false;
                }

però non so se abbia fatto la cosa correttamente  :'(

mi aiutereste?

grazie.

Post unito: 29 Marzo 2013, 16:47:28 CET
Mi correggo ancora........



non va.

o meglio colora le righe corrette ma scorrendo colora anche altre righe. :'(
« Ultima modifica: 29 Marzo 2013, 16:47:29 CET da daniweb, Reason: Merged DoublePost »

Offline lorux

  • Utente junior
  • **
  • Post: 97
  • Respect: +12
    • Google+
    • lor.catalano
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S2
  • Sistema operativo:
    Windows
Re:colorare il testo di una listview in base ai dati
« Risposta #1 il: 04 Aprile 2013, 08:06:08 CEST »
0
Quando hai una list,Android "ricicla" le righe che non deve più mostrare per risparmiare risorse quando crea le righe che devi mostrare, quindi se nella schermata vedi 4 righe alla volta e alla prima riga avevi messo lo sfondo blu, quando scrolli e vedi la quinta riga questa avrà sfondo blu e tutte le proprietà che aveva la prima riga.
Devi ripristinare le impostazioni di default per ogni riga quando la crei nel getview dell'adapter

Offline daniweb

  • Nuovo arrivato
  • *
  • Post: 30
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    galaxy s2
  • Sistema operativo:
    windows 7
Re:colorare il testo di una listview in base ai dati
« Risposta #2 il: 04 Aprile 2013, 10:21:22 CEST »
0
ho risolto indicando il colore base. anche se non so se sia corretto.

Codice (Java): [Seleziona]
@Override
                public boolean setViewValue(View view, Cursor cursor, int columnIndex){    
                    final int modificato = cursor.getColumnIndex(BeneTable.MODIFICA);
                    final int modifica = cursor.getInt(modificato);
                    if( modifica==1)
                    {
                        ((TextView) view).setTextColor(Color.RED);
                    }else
                   {      ((TextView) view).setTextColor(Color.BLACK);       }
                    return false;
                }

in questo modo il colore viene corretto.