Autore Topic: Listview dialog  (Letto 1143 volte)

Offline C_G

  • Utente junior
  • **
  • Post: 69
  • Respect: 0
    • Mostra profilo
Listview dialog
« il: 04 Dicembre 2013, 17:44:43 CET »
0
Ho un'Activity con ListView popolata da db, vorrei visualizzare il tutto in una AlertDialog, e al click della riga passare il valore all'Activity. Si può fare? oppure devo per forza creare un'Activity Dialog?

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Listview dialog
« Risposta #1 il: 04 Dicembre 2013, 17:52:07 CET »
0
Probabilmente in qualche modo si può, però tieni conto che le dialog sulla piattaforma android non sono bloccanti e non sostanzialmente non sono pensate per l'uso che vediamo farne in ambito desktop. C'è chi addirittura dice di non usarle mai (ma non condivido nemmeno il punto di vista di questi integralisti delle android guidelines).

Se ti serve proprio la funzione tipica di una dialog "dekstop", secondo me merita usare una activity con sfondo trasparente (se era questo quello che intendevi), così visivamente sembra una dialog, ma hai tutto il corredo di strumenti di una activity.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline C_G

  • Utente junior
  • **
  • Post: 69
  • Respect: 0
    • Mostra profilo
Re:Listview dialog
« Risposta #2 il: 04 Dicembre 2013, 18:08:16 CET »
0
Ok quindi creo l'Activity Dialog e al click della riga chiudo l'Activity e passo semplicemente il valore tramite putExtra giusto?

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Listview dialog
« Risposta #3 il: 04 Dicembre 2013, 18:26:11 CET »
0
Ok quindi creo l'Activity Dialog e al click della riga chiudo l'Activity e passo semplicemente il valore tramite putExtra giusto?

Si, io farei così.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

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:Listview dialog
« Risposta #4 il: 05 Dicembre 2013, 09:35:21 CET »
0
C'è chi addirittura dice di non usarle mai (ma non condivido nemmeno il punto di vista di questi integralisti delle android guidelines).

Offro il mio punto di vista.
Tutto va contestualizzato.

C'è un grande abuso di Dialog.
Le dialog disturbano, interrompono la mia attività, gli utenti non leggono i messaggi, spesso potrebbero essere sostituiti da altro tipi di messaggi (Toast,Crouton...) meno invasivi, spesso hanno messaggi incomprensibili ed inutili per un utente.

Detto questo, in questo caso specifico, non è un messaggio, ma una interazione indispensabile se ho ben capito.
L'utente deve scegliere un elemento da una lista.
Se la lista non contiene molti elementi si può anche pensare di usare uno spinner o testo con autocompletamento.

Offline C_G

  • Utente junior
  • **
  • Post: 69
  • Respect: 0
    • Mostra profilo
Re:Listview dialog
« Risposta #5 il: 05 Dicembre 2013, 16:14:59 CET »
0
Ho provato già con lo spinner e funziona perfettamente, vorrei raggiungere lo stesso scopo con una Dialog (solamente per una questione di grafica).

Ho creato l'Activity Dialog e impostato l'adapter. Ora però ricevo sempre l'ultima riga della ListView e non quella effettivamente cliccata.
Codice (Java): [Seleziona]
ListAdapter adapter = new ArrayAdapter<Dettaglio>(this, R.layout.detlezione, R.id.tv_nomria, dettagli){
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row = super.getView(position, convertView, parent);
        final TextView tvId;
        final TextView tvCaa;
        ImageView tvC;
        tvC = (ImageView) row.findViewById(R.id.color_view);
        tvId = (TextView) row.findViewById(R.id.lbl);
        tvCaa = (TextView) row.findViewById(R.id.tv_nome_caa);
        tvCaa.setTypeface(tf);
        Dettaglio d = dettagli.get(position);
        tvId.setText(d.id+"");
        tvCaa.setText(d.caa+"");
        tvCaa.setTextColor(d.color);
        tvC.setBackgroundColor(d.color);
        lista.setOnItemClickListener(new OnItemClickListener(){
            @Override
            public void onItemClick(AdapterView<?> parent, View view,int position, long id) {
                Intent invia_a_movimenti = new Intent(Act_v.this, Act_e.class);
                Bundle extras = new Bundle();
                extras.putString("caa", tvCaa.getText().toString());
                extras.putInt("co", tvCaa.getCurrentTextColor());
                invia_a_movimenti.putExtras(extras);
                startActivity(invia_a_movimenti);
            }
        });
        return row;
    };
};
lista.setAdapter(adapter);

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:Listview dialog
« Risposta #6 il: 05 Dicembre 2013, 17:33:16 CET »
0
Ho provato già con lo spinner e funziona perfettamente, vorrei raggiungere lo stesso scopo con una Dialog (solamente per una questione di grafica).

Succede perchè prendi gli elementi dall'ultimo getView() anzichè prenderli dalla position del click.

Codice (Java): [Seleziona]
public void onItemClick(AdapterView<?> parent, View view,int position, long id) {
                Intent invia_a_movimenti = new Intent(Act_v.this, Act_e.class);
                Bundle extras = new Bundle();
                Dettaglio d = dettagli.get(position);  //?
                extras.putString("caa", d.caa);
                //......
                invia_a_movimenti.putExtras(extras);
                startActivity(invia_a_movimenti);
            }

Un paio di cose.
Tu ad ogni getView() (cioè ad ogni riga che viene visualizzata) fai:
Codice (Java): [Seleziona]
 lista.setOnItemClickListenerL'azione è sulla ListView, non serve specificarla ogni volta.

Altra cosa:
Codice (Java): [Seleziona]
Dettaglio d = dettagli.get(position);Normalmente il su utilizza il getItem(position) dentro l'adapter.

Offline C_G

  • Utente junior
  • **
  • Post: 69
  • Respect: 0
    • Mostra profilo
Re:Listview dialog
« Risposta #7 il: 05 Dicembre 2013, 18:23:13 CET »
0
Non devo ottenere il valore dalla TextView ma dalla classe "Dettaglio". Ora funziona come deve!
Grazie e complimenti per la tua disponibilità e competenza!

ps. ho visto dal tuo profilo G+ che sei di Ancona, io di vicino Fabriano.
da circa 5 mesi studio Android e mi piace molto...sai se ci sono corsi di Java nella zona?

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:Listview dialog
« Risposta #8 il: 05 Dicembre 2013, 18:37:26 CET »
0
da circa 5 mesi studio Android e mi piace molto...sai se ci sono corsi di Java nella zona?

Non saprei.