Autore Topic: Come individuare l'elemento selezionato da una lista  (Letto 1739 volte)

Offline andream1977

  • Utente normale
  • ***
  • Post: 260
  • Respect: +7
    • Mostra profilo
  • Dispositivo Android:
    Nexus S
  • Sistema operativo:
    windows xp
Come individuare l'elemento selezionato da una lista
« il: 22 Ottobre 2010, 10:37:34 CEST »
0
Ho un'activity che mostra una lista,  quando l'utete clicca su una riga della lista deve aprirsi il dettaglio di quell'elemento
(non ci sono nè radio button nè hhcekbox)
Funziona tutto ma non so come fare a ricavare la posizione dell'elemento che ha selezionato l'utente, quindi ho la lista delle righe ma non so mostrare il dettaglio dellla riga selezionata perchè non so come ricavarne la posizione

Il codice java è questo

Codice (Java): [Seleziona]
public class ListWithPetsAndCustomAdapter extends ListActivity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.list_view_with_Pets);
                List<Station> listItems = getPetsList();
                ListAdapter adapter = new PetAdapter(this,       listItems);
        }

Il codice xml di ListWithPetsAndCustomAdapter

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="horizontal" android:layout_width="fill_parent"
        android:layout_height="fill_parent" android:background="#ffffffff" >

        <ListView  
        android:id="@android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
       
        />
</LinearLayout>

Il codice java di PetAdapter

Codice (Java): [Seleziona]
public class PetAdapter extends ArrayAdapter<Animal> implements
                OnClickListener {

        Activity context;

        List<Pet> items;

        public PetAdapter(Activity aContext, List<Pet> items) {

                super(aContext, R.layout.Pet, items);

                context = aContext;

                this.items = items;

        }

        public View getView(int position, View convertView, ViewGroup parent) {

                View row = convertView;

                if (row == null) {

                        LayoutInflater inflater = (LayoutInflater) context

                        .getLayoutInflater();

                        row = inflater.inflate(R.layout.Pet, null);

                }

                Address address = ((Pet) items.get(position)).getAddress();
                ecc...


                return row;

        }

       
        @Override
        public void onClick(View v) {
                //NON SO COME RICAVARE position che deve contenere l'indice della riga selezionata
                int position = v.get(Pet) items.get(position);
               
                Intent intent = new Intent(context, PetDetails.class);
                String pkg = context.getPackageName();
                String name = pkg + ".Pet";            
                intent.putExtra(name, Pet);
                startActivity(intent);
                       

        }

}

Il problema è nel metodo onClick() come ho scritto:
NON SO COME RICAVARE position che deve contenere l'indice della riga selezionata
« Ultima modifica: 22 Ottobre 2010, 10:40:33 CEST da andream1977 »

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
« Ultima modifica: 22 Ottobre 2010, 10:44:44 CEST da Ricky` »

Offline JD

  • Amministratore
  • Utente storico
  • *****
  • Post: 1600
  • Respect: +232
    • leinardi
    • Mostra profilo
  • Dispositivo Android:
    LG Nexus 5
  • Sistema operativo:
    L'ultima Ubuntu
Re:Come individuare l'elemento selezionato da una lista
« Risposta #2 il: 22 Ottobre 2010, 10:46:21 CEST »
+1
Perché hai inserito l'onClick dentro l'adapter? Non sarebbe più semplice utilizzare nella onCreate della ListActivity un
Codice (Java): [Seleziona]
ListView listView = getListView();
listView.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
            }
        });
position/id dovrebbero essere qello che ti serve.

EDIT
Ricky` mi ha anticipato ancora una volta :P
« Ultima modifica: 22 Ottobre 2010, 10:48:44 CEST da JD »
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !

Offline andream1977

  • Utente normale
  • ***
  • Post: 260
  • Respect: +7
    • Mostra profilo
  • Dispositivo Android:
    Nexus S
  • Sistema operativo:
    windows xp
Re:Come individuare l'elemento selezionato da una lista
« Risposta #3 il: 22 Ottobre 2010, 10:57:20 CEST »
0
Facendo come dite devo dichiarare come final l'attributo listItems :

final  List<Pet> listItems = getPetsList();

altrimenti non potevo usarlo all'interno di onItemClick, è corretto oppure è meglio se la dichiaro come attributo fuori dal costruttore così non devo dichiararlo final?

Codice (Java): [Seleziona]
public class ListWithPetsAndCustomAdapter extends ListActivity {
        /** Called when the activity is first created. */
         List<Pet> listItems = new ArrayList<Pet>();
        @Override
        public void onCreate(Bundle savedInstanceState) {
       }

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Come individuare l'elemento selezionato da una lista
« Risposta #4 il: 22 Ottobre 2010, 11:05:46 CEST »
0
altrimenti non potevo usarlo all'interno di onItemClick, è corretto oppure è meglio se la dichiaro come attributo fuori dal costruttore così non devo dichiararlo final?

A mio avviso è corretto.

Offline JD

  • Amministratore
  • Utente storico
  • *****
  • Post: 1600
  • Respect: +232
    • leinardi
    • Mostra profilo
  • Dispositivo Android:
    LG Nexus 5
  • Sistema operativo:
    L'ultima Ubuntu
Re:Come individuare l'elemento selezionato da una lista
« Risposta #5 il: 22 Ottobre 2010, 11:09:12 CEST »
+1
Io generalmente lo dichiaro come field, fuori dal costruttore.
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !

Offline andream1977

  • Utente normale
  • ***
  • Post: 260
  • Respect: +7
    • Mostra profilo
  • Dispositivo Android:
    Nexus S
  • Sistema operativo:
    windows xp
Re:Come individuare l'elemento selezionato da una lista
« Risposta #6 il: 22 Ottobre 2010, 11:23:53 CEST »
0
ok, ho implementato il metodo ma quando premo su una riga qualunque della lista il metodo onItemClick non viene considerato, ho messo una stampa
Log.d("", "onItemClick");
ma non appare mai



Codice (Java): [Seleziona]
public class ListWithPetsAndCustomAdapter extends ListActivity {
        List<Pet> listItems = new ArrayList<Pet>();
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.list_view_with_Pets);


               
                int listItemsLength = 10;
                for (int i = 0; i < listItemsLength; i++) {
                        Pet Pet = new Pet();
                        listItems.add(Pet);
                               
                        }
                ListAdapter adapter = new PetAdapter(this,
                                         listItems);
               
                ListView listView = getListView();
                listView.setOnItemClickListener(new OnItemClickListener() {
                            @Override
                            public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                                Log.d("", "onItemClick");
                                Context context = ListWithPetsAndCustomAdapter.this;
                                Pet Pet = (Pet) listItems.get(position);
                                       
                                        Intent intent = new Intent(context, PetDetails.class);
                                        String pkg = context.getPackageName();
                                       

                                        String name = pkg + ".Pet";
                                        Log.d("", "Pet street: " + Pet.getAddress().getStreet());
                                        intent.putExtra(name, Pet);

                                        startActivity(intent);
                            }
                        });
                setListAdapter(adapter);
                //setListAdapter method to display the data from the Cursor on the screen.

       
        }
}

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Come individuare l'elemento selezionato da una lista
« Risposta #7 il: 22 Ottobre 2010, 11:32:48 CEST »
+1
Hai visto il mio primo post?