Autore Topic: listview con righe diverse a seconda dei dati  (Letto 528 volte)

Offline daniweb

  • Nuovo arrivato
  • *
  • Post: 30
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    galaxy s2
  • Sistema operativo:
    windows 7
listview con righe diverse a seconda dei dati
« il: 29 Novembre 2012, 16:43:43 CET »
0
ciao a tuti, spero possiate aiutarmi.
ho una listview popolata da questo codice
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, BeneTable.RIGOCOS, BeneTable.RIGOMOD};
        int[] to = new int[]{R.id.codice, R.id.descrizione, R.id.costruttore, R.id.modello};  
        SimpleCursorAdapter Beni = new SimpleCursorAdapter(this, R.layout.row_beni, mStabCursor, from, to);
        setListAdapter(Beni);
        registerForContextMenu(getListView());
    }

la listview xml è questa:
Codice (Java): [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_marginLeft="15dp"
                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/txt3"
            android:layout_width="wrap_content"
            android:text="COSTRUTTORE: "
                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:text="costruttore"
                android:layout_height="wrap_content"           
                android:textSize="18sp"
                android:layout_toRightOf="@id/txt3"
                android:layout_alignParentBottom="true"/>
        <TextView
            android:id="@+id/txt4"
            android:layout_width="wrap_content"
            android:text="- MODELLO: "
                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:text="modello"
                android:layout_height="wrap_content"           
                android:textSize="18sp"
                android:layout_marginLeft="15dp"
                android:layout_toRightOf="@id/txt4"
                android:layout_alignParentBottom="true" />
</RelativeLayout>

quello che ottengo è una listview dove ogni riga è composa da due righe.

quello che non sono riuscito a capire è se e come poter fare per nascondere la riga inferiore nel caso in cui BeneTable.RIGOCOS e  BeneTable.RIGOMOD siano null

esiste un metodo o cosa dovrei cercare per trovare informazioni?
grazie.

Offline emaborsa

  • Utente normale
  • ***
  • Post: 274
  • Java Developer
  • Respect: +33
    • Google+
    • emaborsa
    • Mostra profilo
    • www.emaborsa.com
  • Dispositivo Android:
    Samsung Galaxy S2
  • Sistema operativo:
    Linux 10 - Win8.1 - Android 4.1.2
Re:listview con righe diverse a seconda dei dati
« Risposta #1 il: 29 Novembre 2012, 16:46:13 CET »
0
Io estendo sempre sempre l'adapter, nel quale faccio l'override del metodo getRow(...), nel quale creo la singola riga.

Mia modifica:

Codice (Java): [Seleziona]
package com.emaborsa.cablePark.core;

import java.util.Vector;

import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.emaborsa.cablePark.R;

public class CountriesAdapter extends ArrayAdapter<String> {

        private Vector<String> countries;
        private Context context;
        private View rowView;
        private ImageView imageView;
        private LayoutInflater inflater;

        public CountriesAdapter(Context context, Vector<String> countries) {
                super(context, R.layout.countries, countries);
                this.context = context;
                this.countries = countries;
                inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

                final int finalPosition = position;
                rowView = inflater.inflate(R.layout.countries_row, parent, false);
                imageView = (ImageView) rowView.findViewById(R.id.countries_list_single_image);
                final TextView textView = (TextView) rowView.findViewById(R.id.countries_list_single_text);
                final LinearLayout container = (LinearLayout) rowView.findViewById(R.id.countries_row_container);
                String country = countries.get(position);
                textView.setText(country);
                container.setOnTouchListener(new View.OnTouchListener() {

                        public boolean onTouch(View v, MotionEvent event) {
                                if (event.getAction() == MotionEvent.ACTION_DOWN) {
                                        container.setBackgroundResource(R.color.bluestrange);
                                        textView.setTextColor(Color.YELLOW);

                                } else if (event.getAction() == MotionEvent.ACTION_CANCEL) {
                                        container.setBackgroundResource(R.color.white);
                                        textView.setTextColor(Color.BLACK);

                                } else if (event.getAction() == MotionEvent.ACTION_UP) {
                                        Intent broadcast = new Intent();
                                        broadcast.putExtra("country", countries.get(finalPosition));
                                        broadcast.setAction(CableParkApplication.COUNTRY);
                                        context.sendBroadcast(broadcast);
                                }
                                return false;
                        }
                });

                String flag = country.replace(" ", "").toLowerCase();
                int resId = context.getResources().getIdentifier(flag, "drawable", CableParkApplication.PACKAGE);
                if (resId == 0) {
                        resId = context.getResources().getIdentifier("allcountries", "drawable", CableParkApplication.PACKAGE);
                }
                imageView.setImageDrawable(context.getResources().getDrawable(resId));
                return rowView;
        }

}
« Ultima modifica: 29 Novembre 2012, 16:48:16 CET da emaborsa »

Offline daniweb

  • Nuovo arrivato
  • *
  • Post: 30
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    galaxy s2
  • Sistema operativo:
    windows 7
Re:listview con righe diverse a seconda dei dati
« Risposta #2 il: 29 Novembre 2012, 18:01:09 CET »
0
grazie per l'informazione :)
alla fine però ho optato per gestire la cosa lato sqllite dato che mi era più familiare.
Codice (Java): [Seleziona]
SELECT *, CASE WHEN ....... THEN...WHEN ...THEN... ELSE... ENDin questo modo ho sostituito i valori delle TextView text2 e text3 con i valori presi da colonne fittizie.
però appena possibile voglio provare anche il metodo che mi hai citato.

grazie ancora.