Autore Topic: Listview e relativo listener  (Letto 1093 volte)

Offline pibraccus

  • Nuovo arrivato
  • *
  • Post: 20
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note
  • Sistema operativo:
    Windows
Listview e relativo listener
« il: 23 Settembre 2012, 22:36:23 CEST »
0
Ciao a tutti, sono Mario e mi sono appena iscritto su questo interessantissimo forum (anche se lo seguo ormai da una paio di settimane). Premesso che sono un neofita nel campo della programmazione a oggetti e Java ma che praticamente studio giorno e notte da un mesetto, volevo chiedervi aiuto con il codice di un'applicazione che sto cercando di sviluppare. In pratica non riesco a settare l'event listener per una listview composta da una imageview e da un textview. Il codice relativo alla visualizzazione della listview funziona alla perfezione (ho preso spunto dal  tutorial di Qlimax http://www.anddev.it/index.php/topic,413.0.html ) ma provando a inserire il listener, l'applicazione non ha il tempo di avviarsi che va subito in crash. Di seguito vi riporto il codice e ringrazio in anticipo chi avrà il tempo di aiutarmi:

Logcat:
Codice: [Seleziona]
09-23 22:26:54.195: W/dalvikvm(22575): threadid=1: thread exiting with uncaught exception (group=0x40c531f8)
09-23 22:26:54.195: E/AndroidRuntime(22575): FATAL EXCEPTION: main
09-23 22:26:54.195: E/AndroidRuntime(22575): java.lang.RuntimeException: Unable to start activity ComponentInfo{it.eventi.appaeventi/it.eventi.appaeventi.MainActivity}: java.lang.NullPointerException

codice java:
Codice (Java): [Seleziona]
ArrayList<HashMap<String, Object>> data = new ArrayList<HashMap<String, Object>>();

                for (int i = 0; i < listaopzioni.size(); i++) {
                        VoceMenu v = listaopzioni.get(i);

                        HashMap<String, Object> mappaVoce = new HashMap<String, Object>();

                        mappaVoce.put("icona", v.getIcona());
                       
                        mappaVoce.put("descrizione", v.getDescrizione());
                       
                        data.add(mappaVoce);
                }
                String[] from = { "icona", "descrizione" };
                int[] to = { R.id.iconImage, R.id.descrizione };

                SimpleAdapter adapter = new SimpleAdapter(getApplicationContext(),
                                data, R.layout.elementolistaprincipale, from, to);

                ((ListView) findViewById(R.id.opzioniprincipali)).setAdapter(adapter);
               
                azioniprincipali.setOnItemClickListener(viewazione);

        }

        OnItemClickListener viewazione = new OnItemClickListener() {
               
               

                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                        // TODO Auto-generated method stub
                        String item = ((TextView)view).getText().toString();
           
            Toast.makeText(getBaseContext(), item, Toast.LENGTH_LONG).show();
                }
                };

Offline Melanogaster

  • Utente normale
  • ***
  • Post: 260
  • Respect: +11
    • Mostra profilo
  • Dispositivo Android:
    SII
  • Sistema operativo:
    Kubuntu
R: Listview e relativo listener
« Risposta #1 il: 24 Settembre 2012, 07:33:19 CEST »
0
Il logcat completo e successivo a quello che hai incollato cosa dice?
Dovrebbe dirti la linea esatta dell'errore NullPointer...

Comunque secondo me é:
Codice: [Seleziona]
String item = ((TextView) view.findViewById(R.id.is_text_view).getText();

Inviato dal mio GT-I9100 con Tapatalk 2

Offline pibraccus

  • Nuovo arrivato
  • *
  • Post: 20
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note
  • Sistema operativo:
    Windows
Re:Listview e relativo listener
« Risposta #2 il: 24 Settembre 2012, 15:32:10 CEST »
0
Ciao! Grazie mille per la tua risposta! Purtroppo non ha funzionato, comunque di seguito posto il codice sano sia dell'app che del logcat. Grazie mille!

Codice (Java): [Seleziona]
package it.eventi.appaeventi;

import java.util.ArrayList;
import java.util.HashMap;

import android.os.Bundle;
import android.app.Activity;
import android.app.ListActivity;
import android.view.Menu;
import android.view.View;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {
        ListView azioniprincipali;
        String[] oggettimenu;
        ProgressBar ProgBar;
        TextView descrizione;

        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                boolean titled = requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);

                setContentView(R.layout.activity_main);

                descrizione = (TextView) findViewById(R.id.descrizione);

                if (titled) {
                        getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,
                                        R.layout.titolo);
                }

                ArrayList<VoceMenu> listaopzioni = new ArrayList<VoceMenu>();

                VoceMenu[] arrayvoci = { new VoceMenu("Hotel", R.drawable.hotel),
                                new VoceMenu("Ristoranti", R.drawable.ristorante),
                                new VoceMenu("Cose da vedere", R.drawable.davedere),
                                new VoceMenu("Shopping", R.drawable.shopping),
                                new VoceMenu("Trasporto", R.drawable.trasporti),
                                new VoceMenu("Qui vicino", R.drawable.quivicino),
                                new VoceMenu("Preferiti", R.drawable.preferiti),
                                new VoceMenu("Servizi utili", R.drawable.serviziutili)

                };

                for (int i = 0; i < arrayvoci.length; i++) {
                        listaopzioni.add(arrayvoci[i]);
                }
                ArrayList<HashMap<String, Object>> data = new ArrayList<HashMap<String, Object>>();

                for (int i = 0; i < listaopzioni.size(); i++) {
                        VoceMenu v = listaopzioni.get(i);

                        HashMap<String, Object> mappaVoce = new HashMap<String, Object>();

                        mappaVoce.put("icona", v.getIcona());

                        mappaVoce.put("descrizione", v.getDescrizione());

                        data.add(mappaVoce);
                }
                String[] from = { "icona", "descrizione" };
                int[] to = { R.id.iconImage, R.id.descrizione };

                SimpleAdapter adapter = new SimpleAdapter(getApplicationContext(),
                                data, R.layout.elementolistaprincipale, from, to);

                ((ListView) findViewById(R.id.opzioniprincipali)).setAdapter(adapter);
               
                 azioniprincipali.setOnItemClickListener(viewazione);

        }

         OnItemClickListener viewazione = new OnItemClickListener() {
         
         

         @Override
         public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                 // TODO Auto-generated method stub
                 String item = ((TextView) view.findViewById(R.id.descrizione)).getText().toString();
   
                 Toast.makeText(getBaseContext(), item, Toast.LENGTH_LONG).show();
         }
         };


       
}

Codice: [Seleziona]
09-24 15:19:00.915: D/AndroidRuntime(6379): Shutting down VM
09-24 15:19:00.915: W/dalvikvm(6379): threadid=1: thread exiting with uncaught exception (group=0x40c571f8)
09-24 15:19:00.915: E/AndroidRuntime(6379): FATAL EXCEPTION: main
09-24 15:19:00.915: E/AndroidRuntime(6379): java.lang.RuntimeException: Unable to start activity ComponentInfo{it.eventi.appaeventi/it.eventi.appaeventi.MainActivity}: java.lang.NullPointerException
09-24 15:19:00.915: E/AndroidRuntime(6379):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1967)
09-24 15:19:00.915: E/AndroidRuntime(6379):         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1992)
09-24 15:19:00.915: E/AndroidRuntime(6379):         at android.app.ActivityThread.access$600(ActivityThread.java:127)
09-24 15:19:00.915: E/AndroidRuntime(6379):         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1158)
09-24 15:19:00.915: E/AndroidRuntime(6379):         at android.os.Handler.dispatchMessage(Handler.java:99)
09-24 15:19:00.915: E/AndroidRuntime(6379):         at android.os.Looper.loop(Looper.java:137)
09-24 15:19:00.915: E/AndroidRuntime(6379):         at android.app.ActivityThread.main(ActivityThread.java:4511)
09-24 15:19:00.915: E/AndroidRuntime(6379):         at java.lang.reflect.Method.invokeNative(Native Method)
09-24 15:19:00.915: E/AndroidRuntime(6379):         at java.lang.reflect.Method.invoke(Method.java:511)
09-24 15:19:00.915: E/AndroidRuntime(6379):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980)
09-24 15:19:00.915: E/AndroidRuntime(6379):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747)
09-24 15:19:00.915: E/AndroidRuntime(6379):         at dalvik.system.NativeStart.main(Native Method)
09-24 15:19:00.915: E/AndroidRuntime(6379): Caused by: java.lang.NullPointerException
09-24 15:19:00.915: E/AndroidRuntime(6379):         at it.eventi.appaeventi.MainActivity.onCreate(MainActivity.java:77)
09-24 15:19:00.915: E/AndroidRuntime(6379):         at android.app.Activity.performCreate(Activity.java:4470)
09-24 15:19:00.915: E/AndroidRuntime(6379):         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1052)
09-24 15:19:00.915: E/AndroidRuntime(6379):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1931)
09-24 15:19:00.915: E/AndroidRuntime(6379):         ... 11 more

Scusami l'ignoranza ma dal logcat non riesco a vedere qual'è la linea di codice che contiene l'errore, come faccio a individuarla?

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Listview e relativo listener
« Risposta #3 il: 24 Settembre 2012, 15:48:40 CEST »
0
Perchè dentro l'onClickListener non fai semplicemente:

Codice (Java): [Seleziona]
HashMap<String, Object> mappaVoce = (HashMap<String, Object>) azioniprincipali.getItemAtPosition(position);
//Fai quello che ti serve con mappaVoce

Citazione
Scusami l'ignoranza ma dal logcat non riesco a vedere qual'è la linea di codice che contiene l'errore, come faccio a individuarla?

Codice: [Seleziona]
09-24 15:19:00.915: E/AndroidRuntime(6379): Caused by: java.lang.NullPointerException
09-24 15:19:00.915: E/AndroidRuntime(6379):         at it.eventi.appaeventi.MainActivity.onCreate(MainActivity.java:77)

Come vedi è la 77

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Listview e relativo listener
« Risposta #4 il: 24 Settembre 2012, 16:25:57 CEST »
0
Se la linea 77 è questa : azioniprincipali.setOnItemClickListener(viewazione); allora o azioniprincipali o viewazione è null.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Sakazaki

  • Utente normale
  • ***
  • Post: 396
  • Respect: +74
    • Mostra profilo
  • Dispositivo Android:
    Sony xperia Z
  • Play Store ID:
    Saka Labs
  • Sistema operativo:
    Windows 8
Re:Listview e relativo listener
« Risposta #5 il: 24 Settembre 2012, 16:39:32 CEST »
0
Ad occhio direi che è null azioniprincipali, non vedo nel codice postato il momento in cui viene valorizzato...

Offline pibraccus

  • Nuovo arrivato
  • *
  • Post: 20
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note
  • Sistema operativo:
    Windows
Re:Listview e relativo listener
« Risposta #6 il: 24 Settembre 2012, 17:55:37 CEST »
0
Ragazzi intanto vi dico grazie per avermi risposto! Adesso provo il codice e vi faccio sapere...

Offline pibraccus

  • Nuovo arrivato
  • *
  • Post: 20
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note
  • Sistema operativo:
    Windows
Re:Listview e relativo listener
« Risposta #7 il: 24 Settembre 2012, 18:10:49 CEST »
0
Che dirvi?!? Innanzitutto nuovamente grazie! Mi sento un pivellino ed effettivamente lo sono. In effetti il problema era proprio relativo al fatto che non avevo valorizzato azioniprincipali. Adesso funziona!!!

Già che ci sono vi faccio un'altra domanda: esiste un modo su eclipse di visualizzare le righe di codice?

E poi scusami Ricky, ma non ho capito il tuo suggerimento, come ho scritto sono ancora alle prime armi... Mi dicevi di usare l'hashmap nel listener per visualizzare i toast?!?

Grazie nuovamente, cambio lo stato del topic in risolto!!!!

Offline Sakazaki

  • Utente normale
  • ***
  • Post: 396
  • Respect: +74
    • Mostra profilo
  • Dispositivo Android:
    Sony xperia Z
  • Play Store ID:
    Saka Labs
  • Sistema operativo:
    Windows 8
Re:Listview e relativo listener
« Risposta #8 il: 24 Settembre 2012, 20:52:16 CEST »
+1
Citazione
esiste un modo su eclipse di visualizzare le righe di codice?

Window -> Preferences -> General -> Editors -> Text Editors -> Show line numbers

Mai capito perché una cosa così utile non sia abilitata di default...

Offline pibraccus

  • Nuovo arrivato
  • *
  • Post: 20
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note
  • Sistema operativo:
    Windows
R: Listview e relativo listener
« Risposta #9 il: 24 Settembre 2012, 21:17:58 CEST »
0
Miii ma come ci dovevo arrivare?!? Grazie mi ha risparmiato un anno di ricerche :))

Inviato dal mio GT-N7000 con Tapatalk 2