Autore Topic: Listview e onclickitem  (Letto 1840 volte)

Offline alepio

  • Utente normale
  • ***
  • Post: 163
  • Respect: +3
    • Google+
    • 107850838
    • Mostra profilo
  • Dispositivo Android:
    SAMSUNG ACE
  • Play Store ID:
    Alessandro Piola
  • Sistema operativo:
    WIN 7
Listview e onclickitem
« il: 08 Luglio 2010, 15:17:32 CEST »
0
Ecco il .java
Codice (Java): [Seleziona]
package ch.egsolutions.simpleadapter;

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

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.ListView;
import android.widget.SimpleAdapter;




public class Demo extends Activity {
   
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        ListView        listView;
        ArrayList<Person> personList=new ArrayList<Person>(); //lista delle persone che la listview visualizzerÃ
       
       
        Person [] people={
                        new Person("Desc","Prod",R.drawable.creep_1),
                        new Person("Cameron", "Diaz", R.drawable.creep_2),
                        new Person("Jessica","Alba",R.drawable.creep_3),
                        new Person("Manuela","Arcuri",R.drawable.creep_4)};
       
        //riempimento casuale della lista delle persone
        Random r=new Random();
        for(int i=0;i<100;i++){
                personList.add(people[r.nextInt(people.length)]);
        }
       
        //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++){
                Person 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("image", p.getPhotoRes()); // per la chiave image, inseriamo la risorsa dell immagine
                personMap.put("name", p.getName()); // per la chiave name,l'informazine sul nome
                personMap.put("surname", p.getSurname());// per la chiave surnaname, l'informazione sul cognome
                data.add(personMap);  //aggiungiamo la mappa di valori alla sorgente dati
        }
       
       
        String[] from={"image","name","surname"}; //dai valori contenuti in queste chiavi
        int[] to={R.id.personImage,R.id.personName,R.id.personSurname};//agli id dei layout
       
        //costruzione dell adapter
        SimpleAdapter adapter=new SimpleAdapter(
                        getApplicationContext(),
                        data,//sorgente dati
                        R.layout.person_item, //layout contenente gli id di "to"
                        from,
                        to);
       
        //utilizzo dell'adapter
        listView = ( ListView ) findViewById( R.id.personListView );
       
        listView.setAdapter(adapter); // )).setAdapter( new PersonAdapter( this, R.layout.row_item, new ArrayList<Person>() ) );
        Log.e("push", Integer.toString(adapter.getCount()));
        Log.e("push",Integer.toString(listView.getCheckedItemPosition()));
        listView.setOnItemClickListener(new OnItemClickListener()
                {
                        public void onItemClick(AdapterView<?> parent, View v, int position, long id)
                        {
               // qui fai le tue cose :)
                        }
       });  
       
       
    }
}

alla fine di questo tutorial ho cercato di aggiungere un listerner all'item cliccato.

OnItemClickListener cannot be resolved to a type


Ma mi da errore e non riesco a capire dove sbaglio.

Grazie
-----------------------------------------------------
Con RISPARMIO BATTERIA - Battery Saver puoi anche dimenticarti a casa il carica batteria. Inoltre con gli EXTRAS puoi configurare la navigazione e disattivare i banner pubblicitari. Battery Saver controlla in automatico lo stato dello schermo.Se è spento disattiva WIFI e NAVIGAZIONE MOBILE, per poi riaccenderle a schermo attivo.
[APP] BatterySaver - Android Developers Italia
--------

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Listview e onclickitem
« Risposta #1 il: 08 Luglio 2010, 15:20:14 CEST »
0
prova ad aggiungere:
Codice (Java): [Seleziona]
import android.widget.AdapterView.OnItemClickListener;

Offline alepio

  • Utente normale
  • ***
  • Post: 163
  • Respect: +3
    • Google+
    • 107850838
    • Mostra profilo
  • Dispositivo Android:
    SAMSUNG ACE
  • Play Store ID:
    Alessandro Piola
  • Sistema operativo:
    WIN 7
Re:Listview e onclickitem
« Risposta #2 il: 08 Luglio 2010, 15:27:23 CEST »
0
prova ad aggiungere:
Codice (Java): [Seleziona]
import android.widget.AdapterView.OnItemClickListener;
SIIIIIIIIIIII
Ma è stata colpa del PC perchè eclipse mi dava di aggiungere la lib ma non la gestiva.
BHO
dopo il riavvio è andato
« Ultima modifica: 08 Luglio 2010, 15:30:44 CEST da alepio »
-----------------------------------------------------
Con RISPARMIO BATTERIA - Battery Saver puoi anche dimenticarti a casa il carica batteria. Inoltre con gli EXTRAS puoi configurare la navigazione e disattivare i banner pubblicitari. Battery Saver controlla in automatico lo stato dello schermo.Se è spento disattiva WIFI e NAVIGAZIONE MOBILE, per poi riaccenderle a schermo attivo.
[APP] BatterySaver - Android Developers Italia
--------

Offline alepio

  • Utente normale
  • ***
  • Post: 163
  • Respect: +3
    • Google+
    • 107850838
    • Mostra profilo
  • Dispositivo Android:
    SAMSUNG ACE
  • Play Store ID:
    Alessandro Piola
  • Sistema operativo:
    WIN 7
Re:Listview e onclickitem
« Risposta #3 il: 08 Luglio 2010, 15:56:22 CEST »
0
prova ad aggiungere:
Codice (Java): [Seleziona]
import android.widget.AdapterView.OnItemClickListener;

§Ciao ti chiedo anche un'altra cosa.
Risolto quel problema volevo chiederti che strada devo percorrere per cambiare i valori della listview.
L'idea è quella di leggere la riga clikkata e cambiarne i valori all'interno.
Magari anche cambiando il colore della riga.


A tuo parere devo cambiare l'adapter e poi ricaricarlo oppure direttamente la listview?
Ciao
Ale

« Ultima modifica: 08 Luglio 2010, 16:47:03 CEST da alepio »
-----------------------------------------------------
Con RISPARMIO BATTERIA - Battery Saver puoi anche dimenticarti a casa il carica batteria. Inoltre con gli EXTRAS puoi configurare la navigazione e disattivare i banner pubblicitari. Battery Saver controlla in automatico lo stato dello schermo.Se è spento disattiva WIFI e NAVIGAZIONE MOBILE, per poi riaccenderle a schermo attivo.
[APP] BatterySaver - Android Developers Italia
--------

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 onclickitem
« Risposta #4 il: 08 Luglio 2010, 17:12:18 CEST »
0
Risolto quel problema volevo chiederti che strada devo percorrere per cambiare i valori della listview.
L'idea è quella di leggere la riga clikkata e cambiarne i valori all'interno.
Magari anche cambiando il colore della riga.

A tuo parere devo cambiare l'adapter e poi ricaricarlo oppure direttamente la listview?

Ciao, qualche settimana fa facendo anche io esperimenti su questo stesso tutorial. Non ho il codice sottomano, ma il metodo che ho usato è stato sostanzialmente:
(1) dal parametro position del listener so quale elemento è stato cliccato
(2) modifico la base dati a tale posizione
(3) uso adapter.notifyDataSetChanged per richiedere il refresh della listview
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Listview e onclickitem
« Risposta #5 il: 08 Luglio 2010, 17:16:04 CEST »
0
§Ciao ti chiedo anche un'altra cosa.
Risolto quel problema volevo chiederti che strada devo percorrere per cambiare i valori della listview.
L'idea è quella di leggere la riga clikkata e cambiarne i valori all'interno.
Magari anche cambiando il colore della riga.

Come vedi dal codice il metodo onItemClick prendere come parametro un oggetto ti tipo View (chiamato di default v), che rappresenta appunto la View cliccata.
Agendo su v puoi modificare il colore di sfondo oppure facendo v.findViewById(IdDelWidget) puoi recuperare oggetti al suo interno.

Offline alepio

  • Utente normale
  • ***
  • Post: 163
  • Respect: +3
    • Google+
    • 107850838
    • Mostra profilo
  • Dispositivo Android:
    SAMSUNG ACE
  • Play Store ID:
    Alessandro Piola
  • Sistema operativo:
    WIN 7
Re:Listview e onclickitem
« Risposta #6 il: 08 Luglio 2010, 17:22:44 CEST »
0
Ciao, qualche settimana fa facendo anche io esperimenti su questo stesso tutorial. Non ho il codice sottomano, ma il metodo che ho usato è stato sostanzialmente:
(1) dal parametro position del listener so quale elemento è stato cliccato
(2) modifico la base dati a tale posizione
(3) uso adapter.notifyDataSetChanged per richiedere il refresh della listview

Il problema è che perdo la posizione.
Se cammbio la riga 20 poi dopo il refresh mi trovo all'inizio dell lista
Allora prelevo la posizione e la risetto, ma così mi trovo si la riga ma in testa.
Se clicco sulla 3 riga mi trovo che dopo il refresh diventa la prima.

bho
-----------------------------------------------------
Con RISPARMIO BATTERIA - Battery Saver puoi anche dimenticarti a casa il carica batteria. Inoltre con gli EXTRAS puoi configurare la navigazione e disattivare i banner pubblicitari. Battery Saver controlla in automatico lo stato dello schermo.Se è spento disattiva WIFI e NAVIGAZIONE MOBILE, per poi riaccenderle a schermo attivo.
[APP] BatterySaver - Android Developers Italia
--------

Offline alepio

  • Utente normale
  • ***
  • Post: 163
  • Respect: +3
    • Google+
    • 107850838
    • Mostra profilo
  • Dispositivo Android:
    SAMSUNG ACE
  • Play Store ID:
    Alessandro Piola
  • Sistema operativo:
    WIN 7
Re:Listview e onclickitem
« Risposta #7 il: 08 Luglio 2010, 17:52:15 CEST »
0
ho sistemato ma credo che non sia ancora perfetto
-----------------------------------------------------
Con RISPARMIO BATTERIA - Battery Saver puoi anche dimenticarti a casa il carica batteria. Inoltre con gli EXTRAS puoi configurare la navigazione e disattivare i banner pubblicitari. Battery Saver controlla in automatico lo stato dello schermo.Se è spento disattiva WIFI e NAVIGAZIONE MOBILE, per poi riaccenderle a schermo attivo.
[APP] BatterySaver - Android Developers Italia
--------

Offline niko_2307

  • Nuovo arrivato
  • *
  • Post: 27
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Hero
Re:Listview e onclickitem
« Risposta #8 il: 07 Settembre 2010, 12:50:58 CEST »
0
io sto riscontrando lo stesso problema non dovuto però ad una questione di importazione.

in pratica ho creato un adapter personalizzato del tipo
Codice (Java): [Seleziona]
class EventAdapter extends ArrayAdapter<Event>
e richiamandolo funziona perfettamente
Codice (Java): [Seleziona]
ArrayAdapter<Event> eventAdapter = new EventAdapter(this, R.layout.row_layout, listEvents);
               
setListAdapter(eventAdapter);


il problema sorge quando cerco di gestire la pressione sull'item in questo modo
Codice (Java): [Seleziona]
eventAdapter.setOnItemClickListener(new OnItemClickListener() {

        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {

l'errore
Codice (Text): [Seleziona]
The method setOnItemClickListener(new AdapterView.OnItemClickListener(){}) is undefined for the type ArrayAdapter<Event>

qualche idea?



« Ultima modifica: 07 Settembre 2010, 15:05:41 CEST da niko_2307 »

Offline alepio

  • Utente normale
  • ***
  • Post: 163
  • Respect: +3
    • Google+
    • 107850838
    • Mostra profilo
  • Dispositivo Android:
    SAMSUNG ACE
  • Play Store ID:
    Alessandro Piola
  • Sistema operativo:
    WIN 7
Re:Listview e onclickitem
« Risposta #9 il: 07 Settembre 2010, 13:55:54 CEST »
0
ti allego il java che ho fatto io.
Funziona perfettamente.
E' un po
Codice (Java): [Seleziona]
            @Override
            public void onCreate(Bundle savedInstanceState) {
                        super.onCreate(savedInstanceState);
                        // Impostiamo il layout principale
                        setContentView(R.layout.gesord);
                       
                       
                        Log.i("start", "qui");
            Log.i("start2", "qui");
                String[] from={"image","name","surname"}; //dai valori contenuti in queste chiavi
                int[] to={R.id.price
                                ,R.id.personName,R.id.personSurname};//agli id dei layout
               
                //costruzione dell adapter
                final SimpleAdapter adapter=new SimpleAdapter(
                                getApplicationContext(),
                                DoG.getData(),//sorgente dati
                                R.layout.gesordlistview, //layout contenente gli id di "to"
                                from,
                                to);
                Log.i("menu", "quo");
                //utilizzo dell'adapter
                listView = ( ListView ) findViewById( R.id.personListView );
                Testo = (TextView) findViewById( R.id.personName);
                listView.setAdapter(adapter);
                Log.i("menu", "qua");
               

               
                listView = ( ListView ) findViewById( R.id.personListView );
                listView.setOnItemClickListener(new OnItemClickListener()
                        {
                        public void onItemClick(AdapterView<?> parent, View v, int position, long id)
                                {
                                Log.i("click-listview", "qui");
                                listView.setItemChecked(position, true);
                                        //_____________________________________________
                                        //prelevo il testo della riga e lo modifico
                                Log.i("menu", "qui");
                                TextView TestoSurn = (TextView) v.findViewById(R.id.personName);
                                        Log.e("push", TestoSurn.getText().toString());
                                        String strStringaTesto = TestoSurn.getText().toString();
                                Log.i("menu", "qui");
                                //DoG.modData(position, "aaaa", "Valore2", "Valore3");
                                listView.invalidateViews();
                                        //-------------------------------------------------------------------
                                        String StringaControllo = strStringaTesto.subSequence(strStringaTesto.length()-4, strStringaTesto.length()).toString();
                                        Log.e("if color",StringaControllo);
                                        if (StringaControllo.contains("-OK-")) {
                                                //personList.add(null);
                                                TestoSurn.setText(strStringaTesto.subSequence(0, strStringaTesto.length()-9).toString());
                                                //v.setBackgroundColor(Color.BLACK);
                                                DoG.modData(position, "ok", strStringaTesto.subSequence(0, strStringaTesto.length()-9).toString(), "Valore3");
                                        }
                                        else {
                                                TestoSurn.setText(strStringaTesto + "     -OK-" );
                                                //v.setBackgroundColor(Color.LTGRAY);
                                                DoG.modData(position, "no", strStringaTesto+ "     -OK-", "Valore3");
                                                }
                                         listView.refreshDrawableState();
                                        listView.invalidateViews();
                                       
                                         //------------------------------------------------------------*/
                                }
               });        
                       
}

Ho fatto proprio un copia incolla, se manca qualcosa dimmi.

Ciao
Alessandro

----------------------------------------------------------------------------------------------

-----------------------------------------------------
Con RISPARMIO BATTERIA - Battery Saver puoi anche dimenticarti a casa il carica batteria. Inoltre con gli EXTRAS puoi configurare la navigazione e disattivare i banner pubblicitari. Battery Saver controlla in automatico lo stato dello schermo.Se è spento disattiva WIFI e NAVIGAZIONE MOBILE, per poi riaccenderle a schermo attivo.
[APP] BatterySaver - Android Developers Italia
--------

Offline niko_2307

  • Nuovo arrivato
  • *
  • Post: 27
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Hero
Re:Listview e onclickitem
« Risposta #10 il: 07 Settembre 2010, 15:01:10 CEST »
0
grazie mille...però il problema è dato dal fatto che ho creato un custom adapter, tu invece hai utilizzato il simpleAdapter

mmm proprio non capisco  :-\

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Listview e onclickitem
« Risposta #11 il: 07 Settembre 2010, 15:08:36 CEST »
0
Il metodo setOnItemClickListener è della classe ListView. Tu stai cercando si impostarlo all'adapter. Eclipse non ti suggerisce il metodo?

Offline niko_2307

  • Nuovo arrivato
  • *
  • Post: 27
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Hero
Re:Listview e onclickitem
« Risposta #12 il: 07 Settembre 2010, 15:14:49 CEST »
0
Il metodo setOnItemClickListener è della classe ListView. Tu stai cercando si impostarlo all'adapter. Eclipse non ti suggerisce il metodo?

non suggerisce nulla....comunque ho risolto, basta mettere getListView al posto di eventAdapter in questo modo
Codice (Java): [Seleziona]
getListView().setOnItemClickListener(new OnItemClickListener() {
la cosa strana è che all'inzio il mio codice era proprio questo, ma l'ho cambiato perchè eclipse mi tornava l'errore!  o_O o_O