Passare diverse query alla ListView

di Anonimizzato12301 il
5 risposte
Ciao, tramite una AlertDialog faccio scegliere all'utente una determinata stringa. Siccome la scelta è tra 15 righe (12mesi dell'anno+3 righe in cui ci sono 1 trimestre,2 trimestre, 3 trimestre ), quando l'utente ne sceglie uno devo passare al Cursor la query che preleva i dati per quel determinato mese.

Secondo me ho 2 strade davanti: la prima è creare 15 metodi diversi (cosa orrenda), la seconda è creare un unico metodo, 15 diverse stringhe (es. String sql1 = "SELECT ecc...";), e passare al Cursor la stringa giusta.

Avete altre idee?? grazie

5 Risposte

  • Secondo me sarebbe ancora meglio se la query fosse parametrica, in modo da utilizzare la stessa query ma cambiando solo il parametro
  • Ho modificato la domanda.
    Consiglii?
  • Secondo me potresti creare 2 metodi, uno per i mesi e uno per i trimestri. Per i mesi non c'è problema, basta che usi l'indice per indicare il mese. Per i trimestri invece ti tocca giocare un po' con gli indici per ottenere quello che ti serve.
    Nota comunque che i trimestri sono 4 in un anno, e non 3!
  • Si si 4 trimestri, ho dimenticato di scriverlo nel post.

    Dunque ora scrivo tutto ciò che ho fatto fin ora:
    Array che butto nella dialog
    
    <string-array name="mesi">
            <item >Gennaio</item>
            <item >Febbraio</item>
            <item >Marzo</item>
            <item >Aprile</item>
            <item >Maggio</item>
            <item >Giugno</item>
            <item >Luglio</item>
            <item >Agosto</item>
            <item >Settembre</item>
            <item >Ottobre</item>
            <item >Novembre</item>
            <item >Decembre</item>
            <item >1° Trimestre</item>
            <item >2° Trimestre</item>
            <item >3° Trimestre</item>
            <item >4° Trimestre</item>
            <item >1° Semestre</item>
            <item >2° Semestre</item>
            <item >Tutti i mesi</item>
        </string-array>
    
    array dal quale prendo la stringa corrispondente al mese per la query:
    
    <string-array name="numero_mesi">
            <item >01</item>
            <item >02</item>
            <item >03</item>
            <item >04</item>
            <item >05</item>
            <item >06</item>
            <item >07</item>
            <item >08</item>
            <item >09</item>
            <item >10</item>
            <item >11</item>
            <item >12</item>
            <item >13</item>
            <item >14</item>
            <item >15</item>
            <item >16</item>
            <item >17</item>
            <item >18</item>
            <item >19</item>
        </string-array>
    
    dialog:
    
     private void AlertMesi() {
            final int meseChoice = Integer.parseInt(mese_query)-1;
    
            final String[] mesi = getResources().getStringArray(R.array.mesi);
            final String[] mesi_valore = getResources().getStringArray(R.array.numero_mesi);
    
    ContextThemeWrapper themedContext = new ContextThemeWrapper(getActivity(), android.R.style.Theme_Holo_Light);
    
            AlertDialog.Builder builder = new AlertDialog.Builder(themedContext);
            builder.setTitle("Seleziona mese o periodo");
            builder.setSingleChoiceItems(mesi, meseChoice,
            new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int item) {
          //setto il nome del mese nel bottone
           btnMese.setText(mesi[item]);
          //assegno alla stringa mese_query il valore corrispondente al mese per la query
          mese_query = mesi_valore[item];
         //se il mese scelto è superiore a dicembre cambio metodo
                            if (meseChoice <= 11) {
                                System.out.println(" "+meseChoice);
                                dialog.cancel();
                                listaOperatori();
                                listaServizi();
                                return;
                            }
                           if (meseChoice == 12) {
                                listaOperatori_1Trimestre();
                                Toast.makeText(getActivity(), "listaOperatori_1Trimestre()", Toast.LENGTH_SHORT).show();
                                dialog.dismiss();
                                return;
                            }
    
                        }
                    });
            builder.setNegativeButton("Annulla", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    dialog.dismiss();
                }
            });
            AlertDialog alert = builder.create();
            alert.show();
        }
    
    fino al click su Dicembre (11) tutto funziona bene,
    ora pero se meseChoice == 12 quell'if non viene letto, ho messo un Toast per verifica e non viene letto. Cosa sbaglio??
  • Secondo me dovresti provare ad usare le funzioni di debug per vedere cosa succede quando selezioni un mese.

    Comunque l'unico punto in cui assegni un valore a meseChoice è alla prima riga, dove vedo un "-1". Io controllerei quella riga e il momento in cui setti mese_query
Devi accedere o registrarti per scrivere nel forum
5 risposte