Autore Topic: visualizzare item dal DB nello spinner  (Letto 346 volte)

Offline newbie2016

  • Utente junior
  • **
  • Post: 79
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Cubot X9
  • Sistema operativo:
    Windows 7
visualizzare item dal DB nello spinner
« il: 07 Luglio 2016, 18:22:46 CEST »
0
Salve, Ho uno Spinner Padre (professioni) che selezionato apre il secondo spinner Figlio (in base alla selezione del Padre visualizza determinati item nel Figlio)

come recuperare il dato dal db dello spinner e visualizzarlo?

da questo codice visualizzo tutti e tre gli spinner collegati tra loro, ma come faccio a far visualizzare l'item inserito nel db per ogni spinner
Codice (Java): [Seleziona]
Spinner professione = (Spinner)findViewById(R.id.professione);
        final ArrayAdapter<CharSequence> adapter_professione = ArrayAdapter.createFromResource(this, R.array.professione, android.R.layout.simple_spinner_item);
        adapter_professione.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        professione.setAdapter(adapter_professione);
        professione.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                String selezionata = "p"+position;
                Log.d("sel",selezionata);
                final Spinner professione_specifica;
                final Spinner professione_livello;
                professione_specifica = (Spinner)findViewById(R.id.professione_specifica);
                professione_specifica.setAdapter(null);
                professione_specifica.setVisibility(View.GONE);
                professione_livello = (Spinner)findViewById(R.id.professione_livello);
                professione_livello.setAdapter(null);
                professione_livello.setVisibility(View.GONE);
                if( !selezionata.equals("p0") && !selezionata.equals("p9") ){
                    int resourceId = getResources().getIdentifier(selezionata, "array", getPackageName());
                    Log.d("num",String.valueOf(resourceId));
                    final ArrayAdapter<CharSequence> adapter_professione_specifica = ArrayAdapter.createFromResource(ViewProfessioni.this, resourceId, android.R.layout.simple_spinner_item);
                    adapter_professione_specifica.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                    professione_specifica.setAdapter(adapter_professione_specifica);
                    professione_specifica.setClickable(true);
                    professione_specifica.setFocusable(true);
                    professione_specifica.setVisibility(View.VISIBLE);
                    professione_specifica.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                        @Override
                        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                            final Spinner professione_livello;
                            professione_livello = (Spinner)findViewById(R.id.professione_livello);
                            if( position != 0 ){
                                final ArrayAdapter<CharSequence> adapter_professione_livello = ArrayAdapter.createFromResource(ViewProfessioni.this, R.array.professione_livello, android.R.layout.simple_spinner_item);
                                adapter_professione_livello.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                                professione_livello.setAdapter(adapter_professione_livello);
                                professione_livello.setClickable(true);
                                professione_livello.setFocusable(true);
                                professione_livello.setVisibility(View.VISIBLE);
                            }
                        }

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

                        }
                    });
                }else{
                    professione_specifica.setClickable(false);
                    professione_specifica.setFocusable(false);
                    professione_livello.setClickable(false);
                    professione_livello.setFocusable(false);
                    professione_specifica.setAdapter(null);
                    professione_livello.setAdapter(null);
                    professione_specifica.setVisibility(View.GONE);
                    professione_livello.setVisibility(View.GONE);
                }
            }

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

            }
        });
il primo spinner riesco a visualizzarlo così;
Codice (Java): [Seleziona]
final Spinner spnTipo = (Spinner)findViewById(R.id.professione);
            ArrayAdapter<CharSequence> adaptern = ArrayAdapter.createFromResource(this, R.array.professione, android.R.layout.simple_spinner_item);
            adaptern.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            spnTipo.setAdapter(adaptern);
            String professione = c.getString(Config.TAG_PROFESSIONI);
            spnTipo.setSelection(adaptern.getPosition(professione));
            Log.i("SPINNER",""+adaptern.getPosition(professione));

gli altri due Spinner professione_specifica e professione_livello come faccio a visualizzarli?

Grazie

Post unito: [time]07 Luglio 2016, 22:19:54 CEST[/time]
come posso visualizzare gli item degli altri due spinner prelevandoli da db?
Come il primo spinner (che ho postato prima) che riesco a prelevare gli altri due come posso integrali a questo codice

Codice (Java): [Seleziona]
final Spinner spnTipo = (Spinner)findViewById(R.id.professione);
            ArrayAdapter<CharSequence> adaptern = ArrayAdapter.createFromResource(this, R.array.professione, android.R.layout.simple_spinner_item);
            adaptern.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            spnTipo.setAdapter(adaptern);
            String professione = c.getString(Config.TAG_PROFESSIONI);
            spnTipo.setSelection(adaptern.getPosition(professione));
            Log.i("SPINNER",""+adaptern.getPosition(professione));

Grazie

Post unito: 08 Luglio 2016, 15:13:47 CEST
nessun suggerimento?
« Ultima modifica: 08 Luglio 2016, 15:13:47 CEST da newbie2016, Reason: Merged DoublePost »

Offline newbie2016

  • Utente junior
  • **
  • Post: 79
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Cubot X9
  • Sistema operativo:
    Windows 7
Re:visualizzare item dal DB nello spinner
« Risposta #1 il: 11 Luglio 2016, 17:42:28 CEST »
0
niente facendo altre prove mi visualizza solo il primo spinner gli altri due no.

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 580
  • Respect: +130
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 7 x64
Re:visualizzare item dal DB nello spinner
« Risposta #2 il: 12 Luglio 2016, 10:37:48 CEST »
0
La domanda non è chiara, e meno chiara è una domanda meno possibilità hai di avere una risposta.

- Quanti spinner hai? Due o tre?
- Come sono relazionati da loro?
- Qual'è il risultato che vuoi ottenere?
- Che cos'è che non funziona?
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline newbie2016

  • Utente junior
  • **
  • Post: 79
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Cubot X9
  • Sistema operativo:
    Windows 7
Re:visualizzare item dal DB nello spinner
« Risposta #3 il: 12 Luglio 2016, 12:17:14 CEST »
0
allora gli spinner sono 3 professione / professione_specifica / professione livello

questo è il codice che utilizzo per il primo inserimento dei dati nel DB. Selezionando un Item nel primo Spinner, nel secondo Spinner visualizzo gli item relativi all'item selezionato nel primo, nel terzoSpinner visualizzo gli item relativi all'item selezionato nel secondo:

Codice (Java): [Seleziona]
Spinner professione = (Spinner)findViewById(R.id.professione);
        final ArrayAdapter<CharSequence> adapter_professione = ArrayAdapter.createFromResource(this, R.array.professione, android.R.layout.simple_spinner_item);
        adapter_professione.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        professione.setAdapter(adapter_professione);
        professione.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                String selezionata = "p"+position;
                Log.d("sel",selezionata);
                final Spinner professione_specifica;
                final Spinner professione_livello;
                professione_specifica = (Spinner)findViewById(R.id.professione_specifica);
                professione_specifica.setAdapter(null);
                professione_specifica.setVisibility(View.GONE);
                professione_livello = (Spinner)findViewById(R.id.professione_livello);
                professione_livello.setAdapter(null);
                professione_livello.setVisibility(View.GONE);
                if( !selezionata.equals("p0") && !selezionata.equals("p9") ){
                    int resourceId = getResources().getIdentifier(selezionata, "array", getPackageName());
                    Log.d("num",String.valueOf(resourceId));
                    final ArrayAdapter<CharSequence> adapter_professione_specifica = ArrayAdapter.createFromResource(ViewProfessioni.this, resourceId, android.R.layout.simple_spinner_item);
                    adapter_professione_specifica.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                    professione_specifica.setAdapter(adapter_professione_specifica);
                    professione_specifica.setClickable(true);
                    professione_specifica.setFocusable(true);
                    professione_specifica.setVisibility(View.VISIBLE);
                    professione_specifica.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                        @Override
                        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                            final Spinner professione_livello;
                            professione_livello = (Spinner)findViewById(R.id.professione_livello);
                            if( position != 0 ){
                                final ArrayAdapter<CharSequence> adapter_professione_livello = ArrayAdapter.createFromResource(ViewProfessioni.this, R.array.professione_livello, android.R.layout.simple_spinner_item);
                                adapter_professione_livello.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                                professione_livello.setAdapter(adapter_professione_livello);
                                professione_livello.setClickable(true);
                                professione_livello.setFocusable(true);
                                professione_livello.setVisibility(View.VISIBLE);
                            }
                        }

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

                        }
                    });
                }else{
                    professione_specifica.setClickable(false);
                    professione_specifica.setFocusable(false);
                    professione_livello.setClickable(false);
                    professione_livello.setFocusable(false);
                    professione_specifica.setAdapter(null);
                    professione_livello.setAdapter(null);
                    professione_specifica.setVisibility(View.GONE);
                    professione_livello.setVisibility(View.GONE);
                }
            }

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

            }
        });

per la registrazione è tutto ok.
Il problema è quando devo modificare i dati del DB. Vorrei che all'apertura della schermata di modifica mi si visualizzassero i tre spinner con già selezionati gli item inseriti nel DB.

ho provato a visualizzare l'item inserito nel db del primo spinner così:

Codice (Java): [Seleziona]
final Spinner spnTipo = (Spinner)findViewById(R.id.professione);
            ArrayAdapter<CharSequence> adaptern = ArrayAdapter.createFromResource(this, R.array.professione, android.R.layout.simple_spinner_item);
            adaptern.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            spnTipo.setAdapter(adaptern);
            String professione = c.getString(Config.TAG_PROFESSIONI);
            spnTipo.setSelection(adaptern.getPosition(professione));
            Log.i("SPINNER",""+adaptern.getPosition(professione));

e funziona.

ma per visualizzare l'item inserito nel DB nel secondo e nel terzo spinner come posso fare?

il risultato deve essere questo:
quando apro la pagina modifica dati devo visualizzare nel primo, nel secondo e nel terzo spinner i dati inseriti nel DB.
Spero di essere stato chiaro.

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 580
  • Respect: +130
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 7 x64
Re:visualizzare item dal DB nello spinner
« Risposta #4 il: 12 Luglio 2016, 13:04:27 CEST »
0
Invece di mettere tutta la gestione nelle classi anonime, dovresti implementare dei metodi che gestiscono la selezione dei singoli spinner.

In pratica dovresti implementare 3 metodi che rispettivamente gestiscono la selezione nel primo, nel secondo e nel terzo spinner.

Questi 3 metodi li invochi poi dalle classi anonime, in fase di "creazione", oppure  nella onCreate in fase di "modifica".

Ossia:

Codice (Java): [Seleziona]
protected void initProfessione(String selezionata) {
        Spinner professione = (Spinner)findViewById(R.id.professione);
        final ArrayAdapter<CharSequence> adapter_professione = ArrayAdapter.createFromResource(this, R.array.professione, android.R.layout.simple_spinner_item);
        adapter_professione.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        professione.setAdapter(adapter_professione);
        if (selezionata != null) {
                //E' richiesto il posizionamento ad un valore specifico
                professione.setSelection(adapter_professione.getPosition(professione));
                Log.i("SPINNER",""+adapter_professione.getPosition(professione));
        }
        professione.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                @Override
                public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                        String selezionata = "p"+position;
                        Log.d("sel",selezionata);
                        int resourceId = -1;
                        if( !selezionata.equals("p0") && !selezionata.equals("p9") ){
                                resourceId = getResources().getIdentifier(selezionata, "array", getPackageName());
                                Log.d("num",String.valueOf(resourceId));
                        }
                        initProfessioneSpecifica(resourceId);
                }
        }
}

protected void initProfessioneSpecifica(int resourceId) {
        final Spinner professione_specifica;
        final Spinner professione_livello;
       
        professione_specifica = (Spinner)findViewById(R.id.professione_specifica);
        professione_specifica.setAdapter(null);
        professione_specifica.setVisibility(View.GONE);
       
        professione_livello = (Spinner)findViewById(R.id.professione_livello);
        professione_livello.setAdapter(null);
        professione_livello.setVisibility(View.GONE);
       
        if(resourceId != -1){
                final ArrayAdapter<CharSequence> adapter_professione_specifica = ArrayAdapter.createFromResource(ViewProfessioni.this, resourceId, android.R.layout.simple_spinner_item);
                adapter_professione_specifica.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                professione_specifica.setAdapter(adapter_professione_specifica);
                professione_specifica.setClickable(true);
                professione_specifica.setFocusable(true);
                professione_specifica.setVisibility(View.VISIBLE);
                professione_specifica.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                        @Override
                        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                                initProfessioneLivello(position);
                        }

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

                        }
                });
        }else{
                professione_specifica.setClickable(false);
                professione_specifica.setFocusable(false);
                professione_livello.setClickable(false);
                professione_livello.setFocusable(false);
                professione_specifica.setAdapter(null);
                professione_livello.setAdapter(null);
                professione_specifica.setVisibility(View.GONE);
                professione_livello.setVisibility(View.GONE);
        }
}

protected void initProfessioneLivello(int position) {
        final Spinner professione_livello;
        professione_livello = (Spinner)findViewById(R.id.professione_livello);
        if( position != 0 ){
                final ArrayAdapter<CharSequence> adapter_professione_livello = ArrayAdapter.createFromResource(ViewProfessioni.this, R.array.professione_livello, android.R.layout.simple_spinner_item);
                adapter_professione_livello.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                professione_livello.setAdapter(adapter_professione_livello);
                professione_livello.setClickable(true);
                professione_livello.setFocusable(true);
                professione_livello.setVisibility(View.VISIBLE);
        }
}

E poi se sei in inserimento farai

Codice (Java): [Seleziona]
initProfessione(null);
Se invece sei in modifica fai:

Codice (Java): [Seleziona]
initProfessione(c.getString(Config.TAG_PROFESSIONI));

initProfessioneSpecifica(id_che_ti_sei_salvato);

initProfessioneLivello(altro_id_che_ti_sei_salvato);

Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline newbie2016

  • Utente junior
  • **
  • Post: 79
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Cubot X9
  • Sistema operativo:
    Windows 7
Re:visualizzare item dal DB nello spinner
« Risposta #5 il: 12 Luglio 2016, 19:26:53 CEST »
0
grazie Ohminibus.
Ho provato a fare come dici tu però mi da errore nella prima parte del codice:
(mi sottolinea in rosso professione e AdapterView.OnItemSelectedListener nelle righe qui sotto
Codice (Java): [Seleziona]
professione.setSelection(adapter_professione.getPosition(professione));
            Log.i("SPINNER",""+adapter_professione.getPosition(professione));
.......
professione.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

Codice (Java): [Seleziona]
protected void initProfessione(String selezionata) {
        Spinner professione = (Spinner)findViewById(R.id.professione);
        final ArrayAdapter<CharSequence> adapter_professione = ArrayAdapter.createFromResource(this, R.array.professione, android.R.layout.simple_spinner_item);
        adapter_professione.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        professione.setAdapter(adapter_professione);
        if (selezionata != null) {
            //E' richiesto il posizionamento ad un valore specifico
            professione.setSelection(adapter_professione.getPosition(professione));
            Log.i("SPINNER",""+adapter_professione.getPosition(professione));
        }
        professione.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                String selezionata = "p"+position;
                Log.d("sel",selezionata);
                int resourceId = -1;
                if( !selezionata.equals("p0") && !selezionata.equals("p9") ){
                    resourceId = getResources().getIdentifier(selezionata, "array", getPackageName());
                    Log.d("num",String.valueOf(resourceId));
                }
                initProfessioneSpecifica(resourceId);
            }
        }
    }
« Ultima modifica: 12 Luglio 2016, 19:29:06 CEST da newbie2016 »

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 580
  • Respect: +130
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 7 x64
Re:visualizzare item dal DB nello spinner
« Risposta #6 il: 13 Luglio 2016, 10:29:54 CEST »
0

Quello che ho postato non è codice funzionante (non l'ho testato); serve solo ad illustrare il concetto, ossia distribuire il codice su più metodi in modo da poterlo riutilizzare.

I piccoli errori "sottolineati in rosso" di solito sono triviali da correggere (errori di battitura, entità non dichiarate o di tipo errato,  ecc.), e comunque relativi al contesto (leggi: senza tutto il sorgente non so come aiutarti).

Hint: se vai sopra la parola sottolineata dovrebbe apparire una lampadina rossa - se ci clicchi suggerisce alcune possibili soluzioni.
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.