Autore Topic: textview visualizzate in listview  (Letto 530 volte)

Offline DirkPitt

  • Nuovo arrivato
  • *
  • Post: 23
  • Respect: 0
    • Mostra profilo
textview visualizzate in listview
« il: 06 Marzo 2012, 21:50:05 CET »
0
Cercando di seguire questo tutorial [medio] Utilizzo dei Button nelle ListView con layout personalizzato - Android Developers Italia mi becco il seguente errore

Codice: [Seleziona]
AndroidRuntime(535): android.view.InflateException: Binary XML file line #8: Error inflating class mieapp.miopackage.ListButton

A cosa può essere dovuto?

P.S. Non ho postato direttamente la risposta al tutorial perchè mi è spuntato il suggerimento ad aprire un nuovo post.

Grazie, ciao!
« Ultima modifica: 07 Marzo 2012, 00:09:40 CET da DirkPitt »

Offline djdedo

  • Utente normale
  • ***
  • Post: 209
  • Respect: +15
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S2
Re:textview visualizzate in listview
« Risposta #1 il: 07 Marzo 2012, 10:15:01 CET »
0
Dovresti postare un pò di codice, ad esempio l'xml del layout della riga ed il tuo adapter.
In questo modo è impossibile non essendo dotati di sfera di cristallo  :)

Offline DirkPitt

  • Nuovo arrivato
  • *
  • Post: 23
  • Respect: 0
    • Mostra profilo
Re:textview visualizzate in listview
« Risposta #2 il: 07 Marzo 2012, 10:58:57 CET »
0
Il codice è uguale a quello del tutorial di cui ho postato il link

layout di riga, file row.xml:
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="wrap_content"
        android:padding="5dip">
   
    <mieapp.miopackage.ListButton
       android:id="@+id/rowView"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content" />
   
</RelativeLayout>

instanzazione dell'adapter:
Codice (Java): [Seleziona]
//list è una linkedlist di TextView
array_adapter = new ArrayAdapter<ListButton>(
                                        this, R.layout.row, list);
myListView.setAdapter(array_adapter);

Già che ci sono faccio presente che ho provato a rendere cliccabili le textview contenute nella list view (al click su una di esse si deve aprire una pagina web), con il seguente codice:
Codice (Java): [Seleziona]
myListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                                ListButton p = (ListButton) parent.getItemAtPosition(position);
                                // prendo un url contenuto nel ListButton e lo apro con una subactivity
                                String url = p.getUrl();
                                Intent intent = new Intent(ActivityPrincipale.this, SottoActivity.class);
                                Bundle b = new Bundle();
                                b.putString("url", url);
                                intent = intent.putExtras(b);
                                startActivity(intent);
                        }
                });

Offline djdedo

  • Utente normale
  • ***
  • Post: 209
  • Respect: +15
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S2
Re:textview visualizzate in listview
« Risposta #3 il: 07 Marzo 2012, 11:17:36 CET »
0
Io credo che ci sia un errore nella definizione dell'adapter. Nelle listview custom in genere si implementa un proprio arrayadapter dove si dice come i vari elementi devono essere utilizzati. Nel tuo caso non puoi dire che è un arrayadapter di listbutton proprio perchè non sa come gestirlo.
Il modo più consono secondo me è implementare un tuo arrayadapter di un tuo oggetto che vuoi fare comparire nella listview e fargli gestire quello

Offline DirkPitt

  • Nuovo arrivato
  • *
  • Post: 23
  • Respect: 0
    • Mostra profilo
Re:textview visualizzate in listview
« Risposta #4 il: 07 Marzo 2012, 11:51:46 CET »
0
Ok grazie del suggerimento. Tuttavia a giudicare dall'errore che ho postato copiandolo dal LogCat a me pare semplicemente che non venga riconosciuto l'oggetto ListButton, che tuttavia io ho definito nel layout come dice il tutorial (ed anche la doc. ufficiale) ovvero package.nomeclasse

L ho ridefinito così:
Codice (Java): [Seleziona]
array_adapter = new ArrayAdapter<ListButton>(
                                        this, R.layout.row, list) {

                                public View getView(int position, View convertView,
                                                ViewGroup parent) {
                                        ListButton item = getItem(position);
                                        LayoutInflater inflater = (LayoutInflater)
                                                        getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                                        View rowView = inflater.inflate(R.layout.row, null);
                                        TextView t = (TextView) findViewById(R.id.rowView); /*****/
                                        t.setText(item.toString());
                                        return rowView;
                                }
                        };

Purtroppo ricevo ancora lo stesso errore :(

Ho asteriscato la riga in cui prendo la textview di cui voglio settare il testo, l ho fatto passando l'id definito nel layout del ListButton (nonostante il nome ListButton estende TextView); non sapevo come altro fare.

In ogni caso il LogCat mi segnala che l'errore avviene nella riga in cui chiamo inflater.inflate
« Ultima modifica: 07 Marzo 2012, 21:25:38 CET da DirkPitt »

Offline DirkPitt

  • Nuovo arrivato
  • *
  • Post: 23
  • Respect: 0
    • Mostra profilo
Re:textview visualizzate in listview
« Risposta #5 il: 07 Marzo 2012, 22:18:34 CET »
0
Credo di aver risolto il problema fin qui discusso. A quanto pare il mio errore consisteva nel non aver riderifinito tutti i costruttori che la mia view eredita da TextView (ne avevo ridefinito solo 1).

Tuttavia non so se mettere o no "risolto" perchè mi parte una NullPointerException al rigo che nel commento precedente ho asteriscato. Tramite il log ho rilevato che la TextView che vado a trovare tramite id (quella nella variabile t) è null. Spero che qualcuno possa aiutarmi!

Grazie ciao!