Autore Topic: Caricare listView a seconda della scelta fatta nello spinner  (Letto 770 volte)

Offline dom4

  • Utente normale
  • ***
  • Post: 158
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Vodafone Ideos, Nexus 5
Caricare listView a seconda della scelta fatta nello spinner
« il: 07 Settembre 2011, 18:24:07 CEST »
0
Salve ragazzi,come scritto nell'oggetto mi trovo a dover gestire uno spinner che se seleziono Deal mi restituisce una listView di Deal,mentre se seleziono Categoria mi restituisce una listView di categorie.Seguendo questa discussione Aiuto su come utilizzare gli Spinner  - Android Developers Italia
Ho impostato tutto allo stesso modo:
Codice (Java): [Seleziona]
 final String[]selection = new String []{"Deal","Categoria"};
   
       
        ArrayAdapter<String> arrayAdapter = new ArrayAdapter(this,android.R.layout.simple_spinner_item,selection);
        sp = (Spinner) findViewById(R.id.spinner2);
        arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        sp.setAdapter(arrayAdapter);
   
        sp.setOnItemSelectedListener(new OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> arg0, View arg1,
                            int position, long id) {
                            choise = selection[position].toString();
                            Log.i("","Selezionato :" +choise.toString());
                           
            }

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

All'avvio dell'applicazione viene visualizzata correttamente la listView Deal,quando seleziono Categoria questa viene memorizzata in choise,perchè la controllo con il log ma non mi carica la lista.Il controllo che è effettuo è il seguente:
Codice (Java): [Seleziona]
 if(choise.equalsIgnoreCase("Categoria"))
Credo che l'errore sia quì,ma non dovrebbe funzionare??
Le liste caricate singolarmente,senza selezione,funzionano benissimo.

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Caricare listView a seconda della scelta fatta nello spinner
« Risposta #1 il: 08 Settembre 2011, 00:29:26 CEST »
0
senza codice non si capisce niente...
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline dom4

  • Utente normale
  • ***
  • Post: 158
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Vodafone Ideos, Nexus 5
Re:Caricare listView a seconda della scelta fatta nello spinner
« Risposta #2 il: 08 Settembre 2011, 09:31:45 CEST »
0
Questo è il codice completo:
Codice (Java): [Seleziona]
ListView listViewDeal;
        ListView listViewCategory;
        DealCategoryAdapter prod;
        DealAdapter prod1;
        //ArrayList<String> selection = new ArrayList<String>();
        String choise = "";
        Spinner sp;
         /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.deal);
        final String[]selection = new String []{"Deal","Categoria"};
       // selection.add("Deal");
        //selection.add("Categoria");
       
        ArrayAdapter<String> arrayAdapter = new ArrayAdapter(this,android.R.layout.simple_spinner_item,selection);
        sp = (Spinner) findViewById(R.id.spinner2);
        arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        sp.setAdapter(arrayAdapter);
   
        sp.setOnItemSelectedListener(new OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> arg0, View arg1,
                            int position, long id) {
                            choise = selection[position];
                            Log.i("","Selezionato :" +choise.toString());
                           
            }

            @Override
            public void onNothingSelected(AdapterView<?> arg0) {
                   
                   
            }
    });
       
       
        try {
                   //Chiamo il Metodo del WebServer
                   SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME2);
       
                   String idCategoriaPadre = "0";
                   Log.i("idCategoriaPadre","idCategoriaPadre " + idCategoriaPadre.toString() );
                   
                   request.addProperty("idCategoriaPadre", idCategoriaPadre);
                 
                   Log.i("addProperty","alla request" + request.getPropertyCount());
                   
                      SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
                      envelope.bodyOut = request;
                      envelope.dotNet = true;
                      envelope.setOutputSoapObject(request);
                      envelope.setAddAdornments(false);
                      envelope.implicitTypes= true;
                      Log.i("Envelope","settata");
               
                      HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
                      //envelope.addMapping(NAMESPACE, "ProdottiConcorsoPortale",new ProdottoConcorsiPortale().getClass());
                      androidHttpTransport.debug = true;
                      androidHttpTransport.call(SOAP_ACTION2, envelope);
                      Log.i("","" + androidHttpTransport.requestDump);
                      Log.i("","" + androidHttpTransport.responseDump);
                      Log.i("call","call");
                   
                      SoapObject resultsRequestSOAP = (SoapObject) envelope.getResponse();
                  Log.i("SoapObject","Result" + resultsRequestSOAP);
                  Log.i("GetAttribute","Count" + resultsRequestSOAP.getPropertyCount());
       
     
   
               ArrayList<Deal> P = null;
               P = new ArrayList<Deal>();
               P = deserializeDeal(resultsRequestSOAP);
               for(Deal p :P)
               {  
                  Log.i("ID","ID PRODOTTO" + p.getId());
                  Log.i("Descrizione","Descrizione prodotto" + p.getDescrizioneBreve());
                  Log.i("Immagine","Link all'immagine" + p.getImage());
                 
                 
           }
       
               listViewDeal = ( ListView ) findViewById( R.id.listDeal );
               prod1 = new DealAdapter(this,R.layout.row_deal,P);
               listViewDeal.setAdapter(prod1);
             
                 }catch(Exception e)
                   {
                         
                   }
       
       if(choise == "Categoria")
        {
                  try {
                   //Chiamo il Metodo del WebServer
                   SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
         
                   String idCategoriaPadre = "0";
                   Log.i("idCategoriaPadre","idCategoriaPadre " + idCategoriaPadre.toString() );
                   
                   request.addProperty("idCategoriaPadre", idCategoriaPadre);
                 
                   Log.i("addProperty","alla request" + request.getPropertyCount());
                   
                      SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
                      envelope.bodyOut = request;
                      envelope.dotNet = true;
                      envelope.setOutputSoapObject(request);
                      envelope.setAddAdornments(false);
                      envelope.implicitTypes= true;
                      Log.i("Envelope","settata");
               
                      HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
                      //envelope.addMapping(NAMESPACE, "ProdottiConcorsoPortale",new ProdottoConcorsiPortale().getClass());
                      androidHttpTransport.debug = true;
                      androidHttpTransport.call(SOAP_ACTION, envelope);
                      Log.i("","" + androidHttpTransport.requestDump);
                      Log.i("","" + androidHttpTransport.responseDump);
                      Log.i("call","call");
                   
                      SoapObject resultsRequestSOAP = (SoapObject) envelope.getResponse();
                  Log.i("SoapObject","Result" + resultsRequestSOAP);
                  Log.i("GetAttribute","Count" + resultsRequestSOAP.getPropertyCount());
           
       
       
                  ArrayList<ProductCategory> P = null;
                  P = new ArrayList<ProductCategory>();
                  P = deserialize(resultsRequestSOAP);
                  for(ProductCategory p :P)
                  {  
                  Log.i("ID","ID PRODOTTO" + p.getId());
                  Log.i("Descrizione","Descrizione prodotto" + p.getDescription());
                  Log.i("Immagine","Link all'immagine" + p.getImage());
                 
                 
              }
         
                  listViewCategory = ( ListView ) findViewById( R.id.listCategoryDeal );
                  prod = new DealCategoryAdapter(this,R.layout.row_dealcategory,P);
                  listViewCategory.setAdapter(prod);
             
             
                 }catch(Exception e)
                   {
                         
                   }
       
        }
   
           
 }
   
« Ultima modifica: 08 Settembre 2011, 09:45:28 CEST da dom4 »

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Caricare listView a seconda della scelta fatta nello spinner
« Risposta #3 il: 08 Settembre 2011, 10:01:11 CEST »
+1
non funziona perchè al cambiamento del valore dello spinner te non notifichi niente alla list view.
Vedo che fai una chiamata remota per caricare gli elementi, quindi dovresti ad ogni cambiamento dello spinner, richiamare il metodo per il download e show dei dati in base alla scelta...
Avevo fatto un tutorial che comprende anche l'evento di refresh della list view (il tutorial si chiama Endlesslist) guardati i sorgenti di quello!
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline dom4

  • Utente normale
  • ***
  • Post: 158
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Vodafone Ideos, Nexus 5
Re:Caricare listView a seconda della scelta fatta nello spinner
« Risposta #4 il: 08 Settembre 2011, 12:59:03 CEST »
0
Grazie per il suggerimento Nicola_D.
Alla fine ho risolto così:
Codice (Java): [Seleziona]
 sp.setOnItemSelectedListener(new OnItemSelectedListener() {
     
            @Override
            public void onItemSelected(AdapterView<?> arg0, View arg1,
                            int position, long id) {
                            choise = selection[position];
                            Log.i("","Selezionato :" +choise.toString());
                               
                            switch(position)
                            {
                            case 0:
                                try
                                {
                                prod.clear();
                                prod.notifyDataSetChanged();
                                }catch(Exception e)
                                {
                                       
                                }
                                ArrayList<Deal> D = downloadDeal();
                                listViewDeal = ( ListView ) findViewById( R.id.listDeal );
                                prod1 = new DealAdapter(getApplicationContext(),R.layout.row_deal,D);
                                listViewDeal.setAdapter(prod1);
                                break;
                            case 1:
                                Log.i("","sono nella scelta");
                                prod1.clear();
                                prod1.notifyDataSetChanged();
                                ArrayList<ProductCategory> PC = downloadCategory();
                                   listViewCategory = ( ListView ) findViewById( R.id.listCategoryDeal );
                                   prod = new DealCategoryAdapter(getApplicationContext(),R.layout.row_dealcategory,PC);
                                   listViewDeal.setAdapter(prod);
                                   break;
                                   default:break;
                            }
                                 
            }

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

Non so se è la maniera più pulita e più performante,ma funziona.Inoltre il tuo tutorial potrebbe servirmi in seguito.
« Ultima modifica: 08 Settembre 2011, 13:08:05 CEST da dom4 »