Autore Topic: Prelevare valore da un item selezionato in una ListView  (Letto 1541 volte)

Offline alex93

  • Utente junior
  • **
  • Post: 56
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy s2
  • Sistema operativo:
    Windows 8
Prelevare valore da un item selezionato in una ListView
« il: 26 Aprile 2013, 17:01:01 CEST »
0
Ciao il mio problema è  prelevare un valore da un item selezionato da una listview e passarlo in una nuova intent. il mio item(della listview) è formato da:
-id
-sezione
-indirizzo
Io dovrei prendere il valore dell'id e passarlo in un altra activity! Sapete come fare?

Sto utilizzando dati prelevati da un database, questo è il codice:
Codice (Java): [Seleziona]
package com.example.tesi;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.LinkedList;
import java.util.List;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;

import com.mysql.jdbc.ResultSetMetaData;

public class lista extends Activity {
       
       
        private static final String url = "jdbc:mysql://10.0.2.2:3306/tesina";
    private static final String user = "root";
    private static final String pass = "";
   
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.listac);
        ListView listView = (ListView)findViewById(R.id.lista);
        List<Sezione> list = new LinkedList<Sezione>();
       
try {
                       
            Class.forName("com.mysql.jdbc.Driver");
            Connection con = DriverManager.getConnection(url, user, pass);
            String result = "Database connection success\n";
            Statement st = con.createStatement();
            ResultSet rs = st.executeQuery("select  id,sezione,indirizzo from classi");
         

            while(rs.next()) {
               
               
                 list.add(new Sezione(rs.getInt(id),rs.getString(sezione),rs.getString(indirizzo)));
               
            }
            CustomAdapter adapter = new CustomAdapter(this, R.layout.riga, list);
            listView.setAdapter(adapter);
           
            OnItemClickListener clickListener = new OnItemClickListener() {

                @Override
                public void onItemClick(AdapterView<?> adapter, View view,
                    int position, long id) {
                        Intent studente = new Intent(getApplicationContext(), Studente.class);
                    studente.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

             
                    startActivity(studente);
                    finish();
                }
            };
            listView.setOnItemClickListener(clickListener);
         
        }
        catch(Exception e) {
            e.printStackTrace();
           
        }  



       
    }

}
« Ultima modifica: 26 Aprile 2013, 17:10:48 CEST da Ricky`, Reason: non servono ??? e !!! »

Offline rs94

  • Utente normale
  • ***
  • Post: 227
  • Respect: +21
    • Mostra profilo
  • Dispositivo Android:
    Sony Ericsson Xperia Arc S
  • Sistema operativo:
    Windows 8
Re:Prelevare valore da un item selezionato in una ListView
« Risposta #1 il: 26 Aprile 2013, 17:19:10 CEST »
+1
Non sapendo come è impostato il tuo customadapter ti dò la soluzione in generale.

Nel metodo onItemClick viene anche passata come parametro la view cliccata.

Quindi ipotizzando che tu abbia 3 textview per mostrare id,sezione e indirizzo e che la textview che contiene l'id abbia id (della view) R.id.textview_id
fai così:

Codice (Java): [Seleziona]
TextView id = (TextView)view.findViewById(R.id.textview_id); //ricavo la textview che contiene l'id dalla view cliccata
String testo_id = id.getText().toString(); //ricavo il testo delle textview in stringa

Intent studente = new Intent(getApplicationContext(), Studente.class);
                    studente.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

studente.putStringExtra("id",testo_id);  //includo la stringa nell'intent
//non mi ricordo bene se il metodo è questo ma dovrebbe essere giusto. poi dalla seconda activity fai getstringextra con parametro "id".

             
                    startActivity(studente);
                    finish();

Non ho modo di testare il codice adesso, potrebbe andare adattato un po.
L'unica certezza è il dubbio.
Dubitare di se stessi è il primo segno di intelligenza.

Offline GabMarioPower

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 606
  • Respect: +152
    • Github
    • Google+
    • gabrielemariotti
    • GabMarioPower
    • Mostra profilo
  • Play Store ID:
    GAB+MARIO+DEV
  • Sistema operativo:
    Ubuntu 14.04 , Win 10
Re:Prelevare valore da un item selezionato in una ListView
« Risposta #2 il: 27 Aprile 2013, 09:56:28 CEST »
+1
Puoi recuperare l'informazione in tanti modi.
Codice (Java): [Seleziona]
 public void onItemClick(AdapterView<?> adapter, View view,  int position, long id) {.......Qui hai tutto quello di cui hai bisogno.

Poi come ti è già stato suggerito, inserisci l'informazione all'interno dell'Intent.

Una cosa importante.
Tu stai caricando la list, attraverso una connessione ad un DB, nel metodo onCreate.
Questo è da evitare, perchè vai a bloccare la UI fino che a che non hai finito di ciclare sul ResultSet.

Dovresti utilizzare un thread per evitare questo o qualsiasi processo asincrono. Per esempio un AsyncTask.


Offline alex93

  • Utente junior
  • **
  • Post: 56
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy s2
  • Sistema operativo:
    Windows 8
Re:Prelevare valore da un item selezionato in una ListView
« Risposta #3 il: 27 Aprile 2013, 12:58:18 CEST »
0
Grazieeeeeeeee mille!!!
« Ultima modifica: 28 Aprile 2013, 13:35:37 CEST da alex93 »