Autore Topic: Click su listview  (Letto 3786 volte)

Offline davix10

  • Utente normale
  • ***
  • Post: 155
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Lg G4
  • Play Store ID:
    davix10
  • Sistema operativo:
    Windows 10
Click su listview
« il: 29 Marzo 2013, 09:32:01 CET »
0
Salve a tutti, ho fatto questo programma che crea delle listview con relativa immagine solo che vorrei gestire il click su ogni singolo elemento ma non riesco ad implementarlo. Qualcuno mi può aiutare?

Grazie in anticipo!

Codice (Java): [Seleziona]
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Random;

import android.app.Activity;

import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity  {
       
       

                 @Override
                    public void onCreate(Bundle savedInstanceState) {
                        super.onCreate(savedInstanceState);
                        setContentView(R.layout.lista);
                       
                        ArrayList<ListaGenerale> personList=new ArrayList<ListaGenerale>(); //lista delle persone che la listview visualizzerà
                       
                        personList.add( new ListaGenerale("Anna","1234",R.drawable.ic_launcher));
                        personList.add( new ListaGenerale("Cameron", "5678", R.drawable.ic_launcher));
                                     
                       
                 
                     
                       
                       
                        //Questa è la lista che rappresenta la sorgente dei dati della listview
                       
                        ArrayList<HashMap<String, Object>> data=new ArrayList<HashMap<String,Object>>();
                       
                       
                        for(int i=0;i<personList.size();i++){
                                ListaGenerale p=personList.get(i);// per ogni persona
                               
                                HashMap<String,Object> personMap=new HashMap<String, Object>();//creiamo una mappa di valori
                               
                                personMap.put("foto", p.getFoto()); // per la chiave image, inseriamo la risorsa dell immagine
                                personMap.put("nome", p.getNome()); // per la chiave name, l'informazione sul nome
                                personMap.put("numero", p.getNumero());// per la chiave numero, l'informazione sul cognome
                                data.add(personMap);  //aggiungiamo la mappa di valori alla sorgente dati
                        }
                       
                       
                        String[] from={"foto","nome","numero"}; //dai valori contenuti in queste chiavi
                        int[] to={R.id.Image,R.id.Nome,R.id.Numero};//agli id delle view
                       
                        //costruzione dell adapter
                        SimpleAdapter adapter=new SimpleAdapter(
                                        getApplicationContext(),
                                        data,//sorgente dati
                                        R.layout.activity_main, //layout contenente gli id di "to"
                                        from,
                                        to);
                       
                        //utilizzo dell'adapter
                        ((ListView)findViewById(R.id.personListView)).setAdapter(adapter);
                       
                       
                    }
                 

                 
                }

Offline rs94

  • Utente normale
  • ***
  • Post: 227
  • Respect: +21
    • Mostra profilo
  • Dispositivo Android:
    Sony Ericsson Xperia Arc S
  • Sistema operativo:
    Windows 8
Re:Click su listview
« Risposta #1 il: 29 Marzo 2013, 12:18:35 CET »
0
metodo listview.onItemClickListener :)
L'unica certezza è il dubbio.
Dubitare di se stessi è il primo segno di intelligenza.

Offline davix10

  • Utente normale
  • ***
  • Post: 155
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Lg G4
  • Play Store ID:
    davix10
  • Sistema operativo:
    Windows 10
Re:Click su listview
« Risposta #2 il: 29 Marzo 2013, 15:33:23 CET »
0
Si così ho provato e funziona solo se dichiaro una stringa del tipo
Codice (Java): [Seleziona]
static final String[] COUNTRIES = new String[] {
   "luca","marco"}
Ma nel modo in cui l'ho fatto io non riesco ad inserire il metodo listview.onItemClickListener

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:Click su listview
« Risposta #3 il: 29 Marzo 2013, 15:41:01 CET »
0
Che significa che non riesci a inserire il metodo?
Postate il LogCat LogCat LogCat LogCat LogCat

Offline davix10

  • Utente normale
  • ***
  • Post: 155
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Lg G4
  • Play Store ID:
    davix10
  • Sistema operativo:
    Windows 10
Re:Click su listview
« Risposta #4 il: 29 Marzo 2013, 16:11:26 CET »
0
Se lo inserisco appena premo sul button che mi porta al layout della listview l'applicazione va in crash e non capisco il motivo

Offline rs94

  • Utente normale
  • ***
  • Post: 227
  • Respect: +21
    • Mostra profilo
  • Dispositivo Android:
    Sony Ericsson Xperia Arc S
  • Sistema operativo:
    Windows 8
Re:Click su listview
« Risposta #5 il: 29 Marzo 2013, 17:04:20 CET »
0
LOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOGCAT :D

Posta il logcat e vediamo l'errore :)
L'unica certezza è il dubbio.
Dubitare di se stessi è il primo segno di intelligenza.

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:Click su listview
« Risposta #6 il: 29 Marzo 2013, 18:44:08 CET »
0
E possibilmente posta pure il codice aggiornato.
Postate il LogCat LogCat LogCat LogCat LogCat

Offline davix10

  • Utente normale
  • ***
  • Post: 155
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Lg G4
  • Play Store ID:
    davix10
  • Sistema operativo:
    Windows 10
Re:Click su listview
« Risposta #7 il: 29 Marzo 2013, 20:42:44 CET »
0
L'ho rifatto e adesso mi da questo errore su setOnItemClickListener

Codice (Java): [Seleziona]
package com.example.numeriutili;

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

import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

public class ListaNumeriUtili extends ListActivity {
         @Override
        public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       
        setContentView(R.layout.lista);
        ArrayList<ListaGenerale> personList=new ArrayList<ListaGenerale>(); //lista delle persone che la listview visualizzerà
   
    personList.add( new ListaGenerale("Anna","1234",R.drawable.ic_launcher));
    personList.add( new ListaGenerale("Cameron", "5678", R.drawable.ic_launcher));
    personList.add( new ListaGenerale("Suca", "3423", R.drawable.ic_launcher));
                 
   

 
   
   
    //Questa è la lista che rappresenta la sorgente dei dati della listview
    //ogni elemento è una mappa(chiave->valore)
    ArrayList<HashMap<String, Object>> data=new ArrayList<HashMap<String,Object>>();
   
   
    for(int i=0;i<personList.size();i++){
        ListaGenerale p=personList.get(i);// per ogni persona all'inteno della ditta
           
            HashMap<String,Object> personMap=new HashMap<String, Object>();//creiamo una mappa di valori
           
            personMap.put("foto", p.getFoto()); // per la chiave image, inseriamo la risorsa dell immagine
            personMap.put("nome", p.getNome()); // per la chiave name,l'informazine sul nome
            personMap.put("numero", p.getNumero());// per la chiave surnaname, l'informazione sul cognome
            data.add(personMap);  //aggiungiamo la mappa di valori alla sorgente dati
    }
   
   
    String[] from={"foto","nome","numero"}; //dai valori contenuti in queste chiavi
    int[] to={R.id.Image,R.id.Nome,R.id.Numero};//agli id delle view
   
    //costruzione dell adapter
    SimpleAdapter adapter=new SimpleAdapter(
                    getApplicationContext(),
                    data,//sorgente dati
                    R.layout.activity_main, //layout contenente gli id di "to"
                    from,
                    to);
   
    //utilizzo dell'adapter
    ((ListView)findViewById(R.id.personListView)).setAdapter(adapter);
   
   

    ListaNumeriUtili.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Toast.makeText(getApplicationContext(), "Click ListItem Number " + position, Toast.LENGTH_LONG).show();
                }
        });
        }
         

}
Sicuramente sbaglio ma non capisco dove  ;-)

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:Click su listview
« Risposta #8 il: 29 Marzo 2013, 20:54:33 CET »
0
Scusa, tu stai estendendo una ListActivity, ma poi imposti l'adapter su un'altra ListView.. Qual'é quella che devi usare? Tra l'altro per utilizzare la ListActivity, devi avere una ListView con id android:id/list. Quindi nel tuo layout hai due ListView?
Postate il LogCat LogCat LogCat LogCat LogCat

Offline davix10

  • Utente normale
  • ***
  • Post: 155
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Lg G4
  • Play Store ID:
    davix10
  • Sistema operativo:
    Windows 10
Re:Click su listview
« Risposta #9 il: 29 Marzo 2013, 21:13:13 CET »
0
No ho solo una ListView
Codice (XML): [Seleziona]
android:id="@+id/personListView"e vorrei utilizzare questa ma non capisco cosa sbaglio

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:Click su listview
« Risposta #10 il: 30 Marzo 2013, 10:45:38 CET »
0
E allora puoi anche estendere Activity, al posto di ListActivity.
Il metodo setOnItemClickListener va chiamato sulla ListView, non sull'Activity..
Postate il LogCat LogCat LogCat LogCat LogCat

Offline davix10

  • Utente normale
  • ***
  • Post: 155
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Lg G4
  • Play Store ID:
    davix10
  • Sistema operativo:
    Windows 10
Re:Click su listview
« Risposta #11 il: 30 Marzo 2013, 12:04:35 CET »
0
Ho provato a modificare così ma mi da lo stesso errore su setOnItemClickListener

Codice (Java): [Seleziona]
package com.example.numeriutili;

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

import android.app.Activity;
import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

public class ListaNumeriUtili extends Activity {
         @Override
        public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       
        setContentView(R.layout.lista);
        ArrayList<ListaGenerale> personList=new ArrayList<ListaGenerale>(); //lista delle persone che la listview visualizzerà
   
    personList.add( new ListaGenerale("Anna","1234",R.drawable.ic_launcher));
    personList.add( new ListaGenerale("Cameron", "5678", R.drawable.ic_launcher));
    personList.add( new ListaGenerale("Suca", "3423", R.drawable.ic_launcher));
                 
   

 
   
   
    //Questa è la lista che rappresenta la sorgente dei dati della listview
    //ogni elemento è una mappa(chiave->valore)
    ArrayList<HashMap<String, Object>> data=new ArrayList<HashMap<String,Object>>();
   
   
    for(int i=0;i<personList.size();i++){
        ListaGenerale p=personList.get(i);// per ogni persona all'inteno della ditta
           
            HashMap<String,Object> personMap=new HashMap<String, Object>();//creiamo una mappa di valori
           
            personMap.put("foto", p.getFoto()); // per la chiave image, inseriamo la risorsa dell immagine
            personMap.put("nome", p.getNome()); // per la chiave name,l'informazine sul nome
            personMap.put("numero", p.getNumero());// per la chiave surnaname, l'informazione sul cognome
            data.add(personMap);  //aggiungiamo la mappa di valori alla sorgente dati
    }
   
   
    String[] from={"foto","nome","numero"}; //dai valori contenuti in queste chiavi
    int[] to={R.id.Image,R.id.Nome,R.id.Numero};//agli id delle view
   
    //costruzione dell adapter
    SimpleAdapter adapter=new SimpleAdapter(
                    getApplicationContext(),
                    data,//sorgente dati
                    R.layout.activity_main, //layout contenente gli id di "to"
                    from,
                    to);
   
    //utilizzo dell'adapter
    ((ListView)findViewById(R.id.personListView)).setAdapter(adapter);
   
   

    personListView.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Toast.makeText(getApplicationContext(), "Click ListItem Number " + position, Toast.LENGTH_LONG).show();
                }
        });
        }
         

}

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:Click su listview
« Risposta #12 il: 30 Marzo 2013, 12:33:09 CET »
0
Da quello che vedo personListView neanche esiste nel tuo codice. Ma stai andando a random?  :D
Postate il LogCat LogCat LogCat LogCat LogCat

Offline davix10

  • Utente normale
  • ***
  • Post: 155
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Lg G4
  • Play Store ID:
    davix10
  • Sistema operativo:
    Windows 10
Re:Click su listview
« Risposta #13 il: 30 Marzo 2013, 12:59:56 CET »
0
Non devo chiamare la ListView su setOnItemClickListener? L'id della mia ListView è personListView

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:Click su listview
« Risposta #14 il: 30 Marzo 2013, 15:09:19 CET »
+1
Allora, innanzitutto credo che qua manchi un bel po' di base Java.
La ListView in questione é un oggetto, quindi il metodo lo chiami sull'oggetto, non l'oggetto sul metodo.
L'id é un intero costante che non é un oggetto e che serve solo per individuare una view in un layout. Per utilizzare l'oggetto effettivo (la ListView) devi recuperarlo tramite id, con la findViewById, che tra l'altro hai già usato.
Non puoi chiamare il metodo sull'intero, non ha senso proprio a livello di sintassi. Sarà questo l'errore di cui parli.
Postate il LogCat LogCat LogCat LogCat LogCat