Autore Topic: ArrayList e Custom Adapter [noob inside]  (Letto 929 volte)

Offline theberserk

  • Nuovo arrivato
  • *
  • Post: 19
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Legend Rooted with Froyo and Sense
  • Sistema operativo:
    Windows with Eclpise plugin
ArrayList e Custom Adapter [noob inside]
« il: 15 Febbraio 2011, 14:02:19 CET »
0
Ciao a tutti, ho realizzato un custom Adapter per una listview che riporti per ogni riga il nome dell'elemento dell'arraylist ed un bottone che mi consenta di esplorare poi l'elemento listato.
il problema è che non viene stampato a schermo nulla, e non viene restituito nessun errore, per cui non capisco dove sto sbagliando, anche utilizzando il log per effettuare il debug non mi compare nulla di strano, i dati paiono esserci tutti.
Vi allego la parte incriminata e spero possiate aiutarmi.
(Non fate caso se ci sono pochi controlli oppure scelte di implementazione discutibili, al momento è solo una versione di prova).
Codice (Java): [Seleziona]
sets = parser.getParsedData();         
                dataSets = (ListView) findViewById(R.id.list_sets);
                ArrayAdapter<DataSet> setsAdapter = new ArrayAdapter<DataSet>(this,
                                R.layout.list_main, R.id.list_main_txt, sets) {
                        @Override
                        public View getView(int position, View convertView, ViewGroup parent) {
                                DataSet set = getItem(position);
                                LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                                convertView = inflater.inflate(R.layout.list_main, null);
                                TextView setName = (TextView) convertView.findViewById(R.id.list_main_txt);
                                setName.setText(set.getName());
                                vDebug("Dataset " + position +":" + set.getName());
                                Button rowButton = (Button) convertView.findViewById(R.id.list_main_b1);
                                rowButton.setTag(position);
                                return convertView;
                        }      
                };
                dataSets.setAdapter(setsAdapter);

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:ArrayList e Custom Adapter [noob inside]
« Risposta #1 il: 15 Febbraio 2011, 14:15:32 CET »
0
Il codice mi sembra corretto, quindi l'errore è da qualche altra parte :)

Offline theberserk

  • Nuovo arrivato
  • *
  • Post: 19
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Legend Rooted with Froyo and Sense
  • Sistema operativo:
    Windows with Eclpise plugin
Re:ArrayList e Custom Adapter [noob inside]
« Risposta #2 il: 15 Febbraio 2011, 14:18:32 CET »
0
Il codice mi sembra corretto, quindi l'errore è da qualche altra parte :)

Ma dove? Nell'activity non c'è altro, questa cosa mi sta facendo diventare matto, come posso capire dove ci potrebbe essere qualcosa che non va? Se vuoi allego la cartella del progetto

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:ArrayList e Custom Adapter [noob inside]
« Risposta #3 il: 15 Febbraio 2011, 14:20:07 CET »
0
Posta l'intera activity e i vari file di layout qui :)

Offline theberserk

  • Nuovo arrivato
  • *
  • Post: 19
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Legend Rooted with Froyo and Sense
  • Sistema operativo:
    Windows with Eclpise plugin
Re:ArrayList e Custom Adapter [noob inside]
« Risposta #4 il: 15 Febbraio 2011, 14:25:13 CET »
0
Questa è l'intera activity, salvo import e package che mi paiono poco utili
Codice (Java): [Seleziona]
public class CrispApp extends Activity {
        ArrayList<DataSet> sets;
        DataSet set;
        TextView titolo1;
        TextView titolo2;
        ListView dataSets;

        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);
                Parser parser = new Parser();
                parser.parseXml(this.getApplicationContext().getResources()
                                .openRawResource(R.raw.report));
                sets = parser.getParsedData();
                DataSet[] sets_array = new DataSet[sets.size()];
                sets_array = sets.toArray(sets_array);         
                dataSets = (ListView) findViewById(R.id.list_sets);
                ArrayAdapter<DataSet> setsAdapter = new ArrayAdapter<DataSet>(this,
                                R.layout.list_main, R.id.list_main_txt, sets_array) {
                        @Override
                        public View getView(int position, View convertView, ViewGroup parent) {
                                DataSet set = getItem(position);
                                LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                                convertView = inflater.inflate(R.layout.list_main, null);
                                TextView setName = (TextView) convertView.findViewById(R.id.list_main_txt);
                                setName.setText(set.getName());
                                vDebug("Dataset " + position +":" + set.getName());
                                Button rowButton = (Button) convertView.findViewById(R.id.list_main_b1);
                                rowButton.setTag(position);
                                return convertView;
                        }      
                };
                dataSets.setAdapter(setsAdapter);
               
                /*
                 * for(int i=0; i< sets.size(); i++){ set = sets.get(i);
                 *
                 * }
                 */

        }
       
        static void vDebug(String debugString) { // metodi di convenienza
                Log.v("CustomAdapter", debugString + "\n");
        }
}


Questo è il layout main.xml
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="horizontal" android:layout_width="fill_parent"
        android:layout_height="fill_parent">   
        <TextView android:text="DataSet disponibili" android:textSize="25sp"
                android:id="@+id/main_title" android:layout_width="fill_parent"
                android:layout_height="wrap_content" android:gravity="center_horizontal" />
        <ListView android:id="@+id/list_sets" android:layout_width="fill_parent"
                android:layout_height="wrap_content" />
</LinearLayout>

Questo è il main_list.xml
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent" android:layout_height="fill_parent"
        android:orientation="horizontal">
        <TextView android:text="Nome Tabella" android:id="@+id/list_main_txt"
                android:layout_width="wrap_content" android:layout_height="wrap_content"
                android:layout_weight="5"></TextView>
        <Button android:text="Mostra" android:id="@+id/list_main_b1" android:textColor="#FFFFFF"
                android:background="#009900" android:padding="10sp"
                android:layout_weight="1" android:layout_width="wrap_content"
                android:layout_height="wrap_content"></Button>

</LinearLayout>


Se trovate alcuni punti di codice già visti è perchè ho capito il funzionamento di alcune cose proprio grazie alle vostre guide.
Noterai rispetto a prima che ho provato ad usare il metodo toArray per vedere se fosse stato quello il problema.




Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:ArrayList e Custom Adapter [noob inside]
« Risposta #5 il: 15 Febbraio 2011, 14:33:00 CET »
+1
Prova a cambiare nel main.xml

Codice (XML): [Seleziona]
android:orientation="horizontal"
Codice (XML): [Seleziona]
android:orientation="vertical"

Offline theberserk

  • Nuovo arrivato
  • *
  • Post: 19
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Legend Rooted with Froyo and Sense
  • Sistema operativo:
    Windows with Eclpise plugin
Re:ArrayList e Custom Adapter [noob inside]
« Risposta #6 il: 15 Febbraio 2011, 14:35:11 CET »
0
Semplicemente Grazie!!!

Solo una domanda anche se un po' Ot.
Se la stringa del nome tabella è troppo lunga come faccio a farla andare a capo e lasciare il bottone "mostra" della stessa dimensione?

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:ArrayList e Custom Adapter [noob inside]
« Risposta #7 il: 15 Febbraio 2011, 14:43:23 CET »
0
Penso con una cosa del genere...

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
       android:layout_width="fill_parent" android:layout_height="fill_parent"
       android:orientation="horizontal">
        <TextView android:text="Nome Tabella" android:id="@+id/list_main_txt" android:layout_alignParentLeft="true"
               android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toLeftOf="@+id/list_main_b1"
               android:layout_weight="5"></TextView>
        <Button android:text="Mostra" android:id="@+id/list_main_b1" android:textColor="#FFFFFF"
               android:background="#009900" android:padding="10sp" android:layout_alignParentRight="true"
               android:layout_weight="1" android:layout_width="wrap_content"
               android:layout_height="wrap_content"></Button>

</RelativeLayout>

Offline theberserk

  • Nuovo arrivato
  • *
  • Post: 19
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Legend Rooted with Froyo and Sense
  • Sistema operativo:
    Windows with Eclpise plugin
Re:ArrayList e Custom Adapter [noob inside]
« Risposta #8 il: 15 Febbraio 2011, 14:49:08 CET »
0
No purtroppo non funziona, mi si presenta sempre in questo modo:



Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:ArrayList e Custom Adapter [noob inside]
« Risposta #9 il: 15 Febbraio 2011, 14:50:48 CET »
0
Io proverei a togliere i android:layout_weight :)
Comunque, smanettaci su un po' e vedrai che risolvi ;)

Offline theberserk

  • Nuovo arrivato
  • *
  • Post: 19
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Legend Rooted with Froyo and Sense
  • Sistema operativo:
    Windows with Eclpise plugin
Re:ArrayList e Custom Adapter [noob inside]
« Risposta #10 il: 15 Febbraio 2011, 14:53:23 CET »
0
Ti ringrazio di tutto!!
Devo dire che Android è tanto semplice nella struttura concettuale di funzionamento quanto pernicioso da implementare, me ne sono accorto trattando gli Intent, Content Provider, i Bundle ed i Parcelable.
Poi di mio sono sempre stato un fabbro con la grafica...