CERCA
PER MODELLO
FullScreen Chatbox! :)

Utente del giorno: 9mm con ben 2 Thanks ricevuti nelle ultime 24 ore
Utente della settimana: 9mm con ben 14 Thanks ricevuti negli ultimi sette giorni
Utente del mese: 9mm con ben 35 Thanks ricevuti nell'ultimo mese

Visualizzazione dei risultati da 1 a 8 su 8
Discussione:

Spinner evento e ArrayAdapter

Se questa discussione ti è stata utile, ti preghiamo di lasciare un messaggio di feedback in modo che possa essere preziosa in futuro anche per altri utenti come te!
  1. #1
    Baby Droid


    Registrato dal
    Mar 2011
    Messaggi
    11

    Ringraziamenti
    0
    Ringraziato 0 volte in 0 Posts
    Unhappy

    (Risolto) Spinner evento e ArrayAdapter

    Buongiorno a tutti, sono un neofita con Android e java, ma sono anni che programmo in c c++ free pascal basic e altro, quindi non mi dovrebbero mancare le basi per capire dove sbaglio, e invece ho il seguente dilemma, come mai la riga in rosso è un errore? Qualcuno sa come aiutarmi, semplicemente voglio cambiare il contenuto di una spinner sulla scelta di un altra spinner. Chi sa dirmi dove sbaglio mi fa un grosso favore.

    package francesco.Indirizzario;

    import android.app.Activity;
    import android.os.Bundle;
    import android.widget.*;
    import android.widget.Spinner;
    import android.widget.SpinnerAdapter;
    import android.widget.AdapterView.*;
    import android.widget.Adapter;
    import android.widget.ViewSwitcher;
    import android.widget.ArrayAdapter;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import francesco.Indirizzario.GenericDAO;
    import android.database.sqlite.SQLiteException;
    import android.util.Log;
    import android.view.*;
    import android.widget.Toast;

    public class Indirizzario extends Activity {
    private String array_via[];
    private String array_nazioni[];
    private String array_citta[];
    private int i;
    private static final String TAG = "GenericDAO";
    private GenericDAO mioDatabaseHelper;
    private SQLiteDatabase db;
    private Cursor cursor;
    private Spinner s1;
    private Spinner s2;
    private Spinner s3;
    private int QuantiRecord;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    mioDatabaseHelper = new GenericDAO(this);

    /* Istanzio la connessione al db */
    try{
    db = mioDatabaseHelper.getWritableDatabase();
    String[] columns = {"_id", "CodNazione","Descrizione"};
    String orderBy = "_id ASC";
    cursor = db.query("T_Nazioni", columns, null, null, null, null, orderBy);
    /* Seleziono la nazione */
    /* cursor.getColumnCount() mi restituisce il numero di record della query */
    array_nazioni=new String[cursor.getColumnCount()-1];
    i=0;
    while (cursor.moveToNext())
    {
    if (cursor.isNull(2))
    {
    array_nazioni[i] = "VUOTO";
    }else
    {
    array_nazioni[i] = cursor.getString(2);
    }
    i++;
    }
    cursor.close();
    db.close();

    Log.i(TAG, "Creating or opening the database.");
    }catch(Exception se){
    array_nazioni=new String[1];
    array_nazioni[0]=se.getMessage();
    Log.e(TAG, "Cound not create and/or open the database that will be used for reading and writing.", se);
    }


    s1 = (Spinner) findViewById(R.id.Cmb_Nazioni);
    ArrayAdapter adapter1 = new ArrayAdapter(this,android.R.layout.simple_spinner_ item, array_nazioni);
    s1.setAdapter(adapter1);



    array_via=new String[5];
    array_via[0]="Via Rossi";
    array_via[1]="Via Pinco Pallo";
    array_via[2]="Via Verdi";
    array_via[3]="Piazza Vittoria";
    array_via[4]="Piazza Verdi";
    s3 = (Spinner) findViewById(R.id.Cmb_Via);
    ArrayAdapter adapter3 = new ArrayAdapter(this, android.R.layout.simple_spinner_item, array_via);
    s3.setAdapter(adapter3);


    s1.setOnItemSelectedListener(new OnItemSelectedListener()
    {
    private ArrayAdapter adapter2;
    //@Override
    public void onItemSelected(AdapterView<?> parent, View view, int position,long id)
    {
    String valNazione = (String) s1.getSelectedItem();
    Toast.makeText(parent.getContext(), valNazione, Toast.LENGTH_LONG).show();

    /* Istanzio la connessione al db */
    try{
    db = mioDatabaseHelper.getWritableDatabase();
    String[] selectionArgs = { };
    String sql = "SELECT T_Citta.Descrizione FROM T_Nazioni, T_Citta WHERE T_Nazioni.Descrizione = '" + valNazione + "' AND T_Nazioni.CodNazione=T_Citta.CodNazione ORDER BY T_Citta.Descrizione ASC";
    Toast.makeText(parent.getContext(),sql , Toast.LENGTH_LONG).show();
    cursor = db.rawQuery(sql, selectionArgs);

    /* Seleziono la nazione */
    /* cursor.getColumnCount() mi restituisce il numero di record della query */
    QuantiRecord=cursor.getCount();
    array_citta = new String[QuantiRecord];
    //array_citta = new String[50];
    i=0;
    Toast.makeText(parent.getContext(),"FIN QUA BENE ", Toast.LENGTH_LONG).show();
    while (cursor.moveToNext())
    {
    if (cursor.isNull(0))
    {
    array_citta[i] = "VUOTO";
    //adapter2.add("VUOTO");
    }else
    {
    array_citta[i] = cursor.getString(0);
    Toast.makeText(parent.getContext(),"ENTRA " + cursor.getColumnName(0) + " " + array_citta[i] , Toast.LENGTH_LONG).show();
    //adapter2.add(cursor.getString(0).toString());
    }
    i++;
    }
    Toast.makeText(parent.getContext(),"FINISCE" , Toast.LENGTH_LONG).show();
    cursor.close();
    db.close();
    Log.i(TAG, "Creating or opening the database.");
    }catch(Exception se){
    Toast.makeText(parent.getContext(),"ERRORE: " + se.getMessage() , Toast.LENGTH_LONG).show();
    Log.e(TAG, "Cound not create and/or open the database that will be used for reading and writing.", se);
    }
    s2 = (Spinner) findViewById(R.id.Cmb_Citta);
    adapter2 = new ArrayAdapter(this ,android.R.layout.simple_spinner_item, array_citta);
    s2.setAdapter(adapter2);

    }

    //@Override
    public void onNothingSelected(AdapterView<?> parent)
    {
    }
    }
    );


    mioDatabaseHelper.close();
    }
    }
    Ultima modifica di xinyiman; 02-03-11 alle 13:12 - Motivo: Risolto

  2.  
  3. #2
    Senior Droid


    Registrato dal
    Dec 2009
    Messaggi
    307

    Ringraziamenti
    15
    Ringraziato 40 volte in 39 Posts
    Predefinito

    Perchè "this" lì dentro è l'OnItemSelectedListener di s1, e quindi non un oggetto che eredita da Context, gli dovresti passare l'activity corrente.

    P.S.: la prossima volta che devi incollare codice qui nel forum, usa il tag java, è molto più leggibile

  4. #3
    Baby Droid


    Registrato dal
    Mar 2011
    Messaggi
    11

    Ringraziamenti
    0
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Quindi basta che scrivo OnItemSelectedListener al posto di quel this? Dici che basta quello?

  5. #4
    Senior Droid


    Registrato dal
    Dec 2009
    Messaggi
    307

    Ringraziamenti
    15
    Ringraziato 40 volte in 39 Posts
    Predefinito

    Quote Originariamente inviato da xinyiman Visualizza il messaggio
    Quindi basta che scrivo OnItemSelectedListener al posto di quel this? Dici che basta quello?
    No, non hai capito.
    Lì in quella riga rossa, "this" è l'oggetto OnItemSelectedListener che stai dichiarando per il tuo Spinner s1, mentre all'Adapter devi passare un oggetto che erediti da Context, ovvero la tua Activity, visto che il listener non eredita da Context.
    Puoi risolvere spostando un po' quel codice, aggiungi un metodo nella tua activity che fa quel che ti serve, e poi in quel listener chiami quel metodo, in questo modo il "this" non ti darà problemi.

  6. #5
    Baby Droid


    Registrato dal
    Mar 2011
    Messaggi
    11

    Ringraziamenti
    0
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Siccome non ho capito mi faresti il favore di modificarmi il codice in maniera corretta?! Così almeno capisco cosa vuoi dire e dall'esempio imparo il concetto. Ti sarei molto grato. Grazie

  7. #6
    Senior Droid


    Registrato dal
    Dec 2009
    Messaggi
    307

    Ringraziamenti
    15
    Ringraziato 40 volte in 39 Posts
    Predefinito

    Da così:

    a così:

    Vedi tu i parametri che ti servono da passare lì dentro.
    Eventualmente puoi anche fare ereditare all'Activity l'interfaccia di OnItemSelectedListener, ma mi sa che è troppo complicato da spiegartelo...

  8. #7
    Baby Droid


    Registrato dal
    Mar 2011
    Messaggi
    11

    Ringraziamenti
    0
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Grazie, appena posso provo e poi ti faccio sapere. Tanto essendo l'arrey dichiarato come globale dovrebbe essere visto tranquillamente dal nuovo metodo senza dare problemi vero?!

  9. #8
    Baby Droid


    Registrato dal
    Mar 2011
    Messaggi
    11

    Ringraziamenti
    0
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Ha funzionato perfettamente, grazie mille

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire risposte
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Torna su
Privacy Policy