Autore Topic: Listview con immagine presente solo se un campo del db è a true  (Letto 864 volte)

Offline coverx

  • Nuovo arrivato
  • *
  • Post: 26
  • Respect: 0
    • Mostra profilo
0
Ciao a tutti, ho provato e riprovato a cercare in rete il mio problema ma non ho trovato nulla che possa portarmi sulla strada giusta.

Avrei bisogno di creare una lista di prodotti con il relativo prezzo prendendo gli elementi da un db. Fin qui nessun problema, ma avrei bisogno di una particolarità.

Per ogni prodotto, accanto al nome e al prezzo vorrei fosse presente una immagine particolare (una stella o cmq un identificativo visivo) ogni volta che PER QUEL prodotto nel db il campo PROMO è settato a 1.

Ovviamente sono riuscito a visualizzare la lista avente: Nome_prod  -  Prezzo  -   1, dove l'uno sta per la promo attiva, ma vorrei solo sostituire quell'uno (quando presente) con una immagine...giusto per far acquisire un pò di personalità alla mia app.

Spero di non essere stato un pò ripetitivo, ma chiaro nell'esposizione del problema.
Grazie a tutti

Offline tharos70

  • Nuovo arrivato
  • *
  • Post: 20
  • Respect: 0
    • tharos70
    • Mostra profilo
  • Dispositivo Android:
    Nexus One
  • Play Store ID:
    tharos70
  • Sistema operativo:
    ubuntu 10.10
Re:Listview con immagine presente solo se un campo del db è a true
« Risposta #1 il: 21 Aprile 2011, 14:35:05 CEST »
0
Ciao io farei così....
Layout per la list activity (list.xml)
Codice: [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                          android:orientation="vertical"
                          android:layout_width="fill_parent"
                          android:layout_height="fill_parent">
        <ListView android:id="@id/android:list"
                          android:layout_width="fill_parent"
                          android:layout_height="wrap_content">
        </ListView>     
</LinearLayout>


Layout per il singolo item della lista (itemLayout.xml)
Codice: [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:id="@+id/RelativeLayout01"
                                xmlns:android="http://schemas.android.com/apk/res/android"
                                android:layout_width="fill_parent"
                                android:layout_height="wrap_content"
                                android:orientation="horizontal" >
<TextView android:id="@+id/ListItemLabel"
                  android:layout_height="wrap_content"
                  android:layout_width="wrap_content"
                  android:text="@+id/TextView01"
                  android:layout_centerVertical="true"
                  android:visibility="visible"
                  android:textAppearance="?android:attr/textAppearanceMedium">
                  </TextView>
<ImageView android:id="@+id/ListItemIcon"
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   android:layout_centerVertical="true">
</ImageView>
</LinearLayout>

Pseudo codice commentato della ListActivity
Codice: [Seleziona]
public class ListActivity extends ListActivity {
       
        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                requestWindowFeature(Window.FEATURE_NO_TITLE);
                setContentView(R.layout.list);
        }

         @Override
        protected void onResume() {
                super.onResume();
                List<Object> rows = getObjectListFromDB(); //Metodo che restituisce la tua lista dal DB
               
                ArrayAdapter<Object> adapter = new ArrayAdapter<Object>(
                                                                                                                        this,
                                                                                                                        R.layout.listitem,
                                                                                                                        R.id.ListItemLabel,
                                                                                                                        rows){
                        @Override
                        public View getView(int position,
                                                         View convertView,
                                                         ViewGroup parent)
                        {
                                Object obj = (Object)getItem(position);
                                LayoutInflater inflater= (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                                View rowView = inflater.inflate(R.layout.itemLayout, null);
                                    TextView textView = (TextView)rowView.findViewById(R.id.ListItemLabel);
                                    ImageView icon = (ImageView)rowView.findViewById(R.id.ListItemIcon);
                               
                                    textView.setText("TESTO CHE VUOI");
                                    icon.setImageResource(R.id.idImmagine);
                                }
                                return rowView;
                        }
                };
                setListAdapter(adapter);
        }
}

E' pseudo codice, ma purtroppo non ho un pc con android sdk configurato e non posso provarlo Spero possa andare bene.
Se dovessi avere problemi scrivi qui sotto e stasera cercherò di correggere il tutto.

Offline coverx

  • Nuovo arrivato
  • *
  • Post: 26
  • Respect: 0
    • Mostra profilo
Re:Listview con immagine presente solo se un campo del db è a true
« Risposta #2 il: 26 Aprile 2011, 10:17:40 CEST »
0
Ciao, grazie mille innanzitutto per la risposta.
Sto cercando di implementare il tuo codice nella mia app, ma nn mi è chiara una cosa sinceramente...dove c'è il controllo che se il campo è a promo = true allora nella lista visualizza una immagine?
Scusa forse sarà una domanda stupida, ma a me piace capire e assimilare i codici, e non magari usarli solo per scavalcare un ostacolo.
Ti ringrazio e scusami se approfitto della tua pazienza  :-[

Offline tharos70

  • Nuovo arrivato
  • *
  • Post: 20
  • Respect: 0
    • tharos70
    • Mostra profilo
  • Dispositivo Android:
    Nexus One
  • Play Store ID:
    tharos70
  • Sistema operativo:
    ubuntu 10.10
Re:Listview con immagine presente solo se un campo del db è a true
« Risposta #3 il: 26 Aprile 2011, 10:27:16 CEST »
0
Ciao il segreto sta in questa riga:
Codice (Java): [Seleziona]
icon.setImageResource(R.id.idImmagine);
Nel caso che ti interessa esegui questa riga di codice....
Codice (Java): [Seleziona]
if (promo){
   icon.setImageResource(R.id.idImmagine);
}

Offline coverx

  • Nuovo arrivato
  • *
  • Post: 26
  • Respect: 0
    • Mostra profilo
Re:Listview con immagine presente solo se un campo del db è a true
« Risposta #4 il: 26 Aprile 2011, 11:15:43 CEST »
0
Ok, grazie mille, ora inizia ad essere molto piu chiaro.
Per
Citazione
List<Object> rows = getObjectListFromDB(); //Metodo che restituisce la tua lista dal DB
intendi ovviamente il metodo del DB che effettua la query vero? Solo che io avevo impostato quel metodo con un semplice cursore....ti scrivo come è ora:
 
Codice: [Seleziona]

public Cursor leggi_righe(long id_DoTes)
{
String query = "SELECT * FROM DORig WHERE id_DoTes='"+id_DoTes+"'";
return mDb.rawQuery(query, null);
}

 
Immagino che ora il metodo non sia piu Cursor ma List<Object> ma come lo dovrei modificare tenendo presente che poi nell'adapter il campo promo è uno dei campi del record che restituisce questa query....
Cioè per via intuitiva mi verrebbe da dire che il codice piu o meno dovrebbe essere così:
Codice: [Seleziona]
if (List.getInt(2)==1){
   icon.setImageResource(R.id.idImmagine);
}

Sbaglio forse?

Offline tharos70

  • Nuovo arrivato
  • *
  • Post: 20
  • Respect: 0
    • tharos70
    • Mostra profilo
  • Dispositivo Android:
    Nexus One
  • Play Store ID:
    tharos70
  • Sistema operativo:
    ubuntu 10.10
Re:Listview con immagine presente solo se un campo del db è a true
« Risposta #5 il: 26 Aprile 2011, 12:29:10 CEST »
0
E' esattamente come dici tu... Davo per scontato che tu gestissi già in quel modo i dati provenienti da DB... Non è molto conveniente mantenere un cursore aperto per il trasporto dei dati fino alla GUI....
Quando parlo di
Codice (Java): [Seleziona]
List<Object> è sottinteso che Object sarà l'oggetto che rappresenta i dati estratti dal DB.... il tuo JavaBean insomma.....
« Ultima modifica: 27 Aprile 2011, 22:41:39 CEST da tharos70 »