Autore Topic: Problema clik su ListView con SimpleAdapter  (Letto 535 volte)

Offline addre_91

  • Nuovo arrivato
  • *
  • Post: 36
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus One
  • Sistema operativo:
    Windows 7
Problema clik su ListView con SimpleAdapter
« il: 07 Maggio 2013, 22:24:13 CEST »
0
Buonasera a tutti, ho un problema con il seguente codice:

Codice (Java): [Seleziona]
public class ActivityBar extends ListActivity {
       
        private ArrayList<Discoteca> elenco_discoteche;
        private ListView listView;
       
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_discoteche);
               
                elenco_discoteche=new ArrayList<Discoteca>();
                elenco_discoteche.add(new Discoteca("D1", "Prova", R.drawable.img));
               
                ArrayList<HashMap<String, Object>> data=new ArrayList<HashMap<String,Object>>();
       
       
        for(int i=0;i<elenco_discoteche.size();i++){
                Discoteca d=elenco_discoteche.get(i);// per ogni persona all'inteno della ditta
               
                HashMap<String,Object> personMap=new HashMap<String, Object>();//creiamo una mappa di valori
               
                personMap.put("image",d.getImmagine()); // per la chiave image, inseriamo la risorsa dell immagine
                //personMap.put("name", d.getNome()); // per la chiave name,l'informazine sul nome
                //personMap.put("descrp", d.getDescrizione());// per la chiave surnaname, l'informazione sul cognome
                data.add(personMap);  //aggiungiamo la mappa di valori alla sorgente dati
        }
       
       
        String[] from={"image"};/*,"name","descrp"}; //dai valori contenuti in queste chiavi*/
        int[] to={R.id.immagine_discoteca/*,R.id.nome_discoteca,R.id.descrizione_discoteca*/};//agli id delle view
       
        //costruzione dell adapter
        SimpleAdapter adapter=new SimpleAdapter(
                        getApplicationContext(),
                        data,//sorgente dati
                        R.layout.lista_discoteche, //layout contenente gli id di "to"
                        from,
                        to);
               
        ((ListView)findViewById(R.id.listView1)).setAdapter(adapter);
               
               
               
                 /*String[] bar = getResources().getStringArray(R.array.bar);
                 ArrayAdapter<String> adapter= new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,bar);

                 ListView listView= (ListView)findViewById(R.id.listView1);
                 listView.setAdapter(adapter);*/

                 
                 listView.setOnItemClickListener(new OnItemClickListener() {

                        @Override
                        public void onItemClick(AdapterView<?> listView, View itemView, int posizione,
                                        long itemId) {
       
                                Discoteca disco=(Discoteca)listView.getItemAtPosition(posizione);
                                Intent intent=new Intent(getApplicationContext(), ActivityBarSpecifico.class);
                               
                                intent.putExtra(getPackageName() ,disco);
                                startActivity(intent);
                        }
                });
        }      
}

Praticamente voglio creare una lista di oggetti personalizzati, e al tocco di uno di essi lanciare un altra activity. Il logcat mi da errore quando instanzio il listener per il clik (NullPointerException). Non capisco perchè, visto che se uso la versione normale con un ArrayAdapter e delle semplici stringhe funziona tutto a meraglia.

Grazie per l' attenzione,
Andrea

Offline blackgin

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1387
  • Respect: +164
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
Re:Problema clik su ListView con SimpleAdapter
« Risposta #1 il: 08 Maggio 2013, 00:24:44 CEST »
0
Per come il codice é commentato in questo momento é ovvio che ti crasha, perché l'oggetto listView non é mai istanziato, quindi non puoi chiamare il metodo setOnItemClickListener.
Perché fai questo
Codice (Java): [Seleziona]
((ListView)findViewById(R.id.listView1)).setAdapter(adapter);e non questo?
Codice (Java): [Seleziona]
ListView listView = (ListView)findViewById(R.id.listView1);
Postate il LogCat LogCat LogCat LogCat LogCat

Offline addre_91

  • Nuovo arrivato
  • *
  • Post: 36
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus One
  • Sistema operativo:
    Windows 7
Re:Problema clik su ListView con SimpleAdapter
« Risposta #2 il: 08 Maggio 2013, 22:22:57 CEST »
0
Perchè sono stupido!

Anche così però non funziona, mi visualizza la lista, ma al click su un elemento mi da un errore di ClassCastException...
Ecco il logcat:
Codice (XML): [Seleziona]
05-08 20:16:37.935: E/AndroidRuntime(384): java.lang.ClassCastException: java.util.HashMap
05-08 20:16:37.935: E/AndroidRuntime(384):      at it.PPSoft.riminibynight.ActivityDiscoteche$1.onItemClick(ActivityDiscoteche.java:75)
05-08 20:16:37.935: E/AndroidRuntime(384):      at android.widget.AdapterView.performItemClick(AdapterView.java:284)
05-08 20:16:37.935: E/AndroidRuntime(384):      at android.widget.ListView.performItemClick(ListView.java:3513)
05-08 20:16:37.935: E/AndroidRuntime(384):      at android.widget.AbsListView$PerformClick.run(AbsListView.java:1812)
05-08 20:16:37.935: E/AndroidRuntime(384):      at android.os.Handler.handleCallback(Handler.java:587)
05-08 20:16:37.935: E/AndroidRuntime(384):      at android.os.Handler.dispatchMessage(Handler.java:92)
05-08 20:16:37.935: E/AndroidRuntime(384):      at android.os.Looper.loop(Looper.java:123)
05-08 20:16:37.935: E/AndroidRuntime(384):      at android.app.ActivityThread.main(ActivityThread.java:3683)
05-08 20:16:37.935: E/AndroidRuntime(384):      at java.lang.reflect.Method.invokeNative(Native Method)
05-08 20:16:37.935: E/AndroidRuntime(384):      at java.lang.reflect.Method.invoke(Method.java:507)
05-08 20:16:37.935: E/AndroidRuntime(384):      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
05-08 20:16:37.935: E/AndroidRuntime(384):      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
05-08 20:16:37.935: E/AndroidRuntime(384):      at dalvik.system.NativeStart.main(Native Method)

Offline rs94

  • Utente normale
  • ***
  • Post: 227
  • Respect: +21
    • Mostra profilo
  • Dispositivo Android:
    Sony Ericsson Xperia Arc S
  • Sistema operativo:
    Windows 8
Re:Problema clik su ListView con SimpleAdapter
« Risposta #3 il: 08 Maggio 2013, 23:18:34 CEST »
0
Il metodo onItemClickListener ti restituisce la view, non l'oggetto che hai usato per crearla. Devi prendere i dati da elenco_discoteche basandoti sulla posizione del click (che ti viene fornito dal metodo). Tipo
Codice (Java): [Seleziona]
 elenco_discoteche.get(posizione); con posizione il parametro int del metodo onItemClick
L'unica certezza è il dubbio.
Dubitare di se stessi è il primo segno di intelligenza.

Offline addre_91

  • Nuovo arrivato
  • *
  • Post: 36
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus One
  • Sistema operativo:
    Windows 7
Re:Problema clik su ListView con SimpleAdapter
« Risposta #4 il: 29 Maggio 2013, 22:57:16 CEST »
0
Scusate il ritardo con cui rispondo. Domani provo a vedere se come mi ha suggerito rs94 funziona. Grazie comunque!