PDA

Visualizza Versione Completa : Collegare un evento allo spinner



Carontes
24-06-11, 18:22
Salve a tutti, sono nuovo sia del forum che dell'ambiente di sviluppo di Android. Spero di non aver sbagliato sezione nel postare il mio messaggio. Ho seguito l'articolo di devapp dove si spiegava come creare e utilizzare uno spinner: http://android.devapp.it/t006-usare-gridview-e-spinner-nelle-applicazioni-android . Molto utile e facile da capire. Nella mia applicazione però ho, oltre allo spinner, anche un EditText che mi fa da "ricerca". Ho anche dei file xml, sono 9 file, che fanno da dati e si trovano nella cartella res/raw. Quello che vorrei fare è poter aprire una schermata contenente i dati relativi a ciò che clicco una volta visualizzati i risultati di ricerca, sia dallo spinner che dall'EditText. Per fare un esempio prendo quanto descritto nell'articolo sopra citato:

1) Mettiamo che per ogni regione io abbia un file xml con dei dati. Es: toscana.xml, marche.xml ecc.

2) All'interno di questi file ci sono le informazioni su ogni città appartenente a quella regione.

3) Se io cliccassi su "Firenze" vorrei far apparire una schermata con i dati relativi a Firenze.

I file di dati contengono molte informazioni e mi è stato suggerito di fare così invece che fare un'activity per ogni oggetto. Se fossero state activity avrei potuto fare un intent per poter avviare l'activity con i dati, ma siccome sono dei file xml come posso fare? Esiste una soluzione? Spero di essere stato chiaro. Se serve del codice ditemelo. Grazie mille per l'aiuto.

fabioCollini
01-07-11, 16:00
Ciao, se ho capito bene secondo me la soluzione può essere quella di creare una activity sola per i dettagli e usare sempre un intent per passare dai risultati di ricerca al dettaglio. Nell'intent puoi aggiungere anche dei parametri (ti basta chiamare intent.putExtra). Nell'activity di dettaglio prendi il parametro dall'intent e in base a questo carichi il file xml corrispondente.
Spero di essere stato chiaro, altrimenti chiedi pure
Ciao, Fabio


Salve a tutti, sono nuovo sia del forum che dell'ambiente di sviluppo di Android. Spero di non aver sbagliato sezione nel postare il mio messaggio. Ho seguito l'articolo di devapp dove si spiegava come creare e utilizzare uno spinner: http://android.devapp.it/t006-usare-gridview-e-spinner-nelle-applicazioni-android . Molto utile e facile da capire. Nella mia applicazione però ho, oltre allo spinner, anche un EditText che mi fa da "ricerca". Ho anche dei file xml, sono 9 file, che fanno da dati e si trovano nella cartella res/raw. Quello che vorrei fare è poter aprire una schermata contenente i dati relativi a ciò che clicco una volta visualizzati i risultati di ricerca, sia dallo spinner che dall'EditText. Per fare un esempio prendo quanto descritto nell'articolo sopra citato:

1) Mettiamo che per ogni regione io abbia un file xml con dei dati. Es: toscana.xml, marche.xml ecc.

2) All'interno di questi file ci sono le informazioni su ogni città appartenente a quella regione.

3) Se io cliccassi su "Firenze" vorrei far apparire una schermata con i dati relativi a Firenze.

I file di dati contengono molte informazioni e mi è stato suggerito di fare così invece che fare un'activity per ogni oggetto. Se fossero state activity avrei potuto fare un intent per poter avviare l'activity con i dati, ma siccome sono dei file xml come posso fare? Esiste una soluzione? Spero di essere stato chiaro. Se serve del codice ditemelo. Grazie mille per l'aiuto.

Carontes
01-07-11, 16:33
Grazie per la risposta. Essendo alle prime armi, però, non ho capito bene la procedura da fare... avresti un esempio da postare utilizzando il tuo vecchio progetto dello spinner se possibile? Grazie infinite.

fabioCollini
05-07-11, 15:26
Grazie per la risposta. Essendo alle prime armi, però, non ho capito bene la procedura da fare... avresti un esempio da postare utilizzando il tuo vecchio progetto dello spinner se possibile? Grazie infinite.

Ciao, ti conviene leggerti il post su Activity e Intent, una volta capite per bene queste due cose dovresti essere a posto!
Ciao, Fabio

Carontes
05-07-11, 16:32
So cosa sono le Activity e gli Intent ma non saprei bene come compilare l'Activity in modo che possa aprirmi i file xml nel punto esatto che voglio io.

fabioCollini
06-07-11, 09:15
Ciao, il punto in cui aprire il file xml secondo me è nel metodo onCreate dell'Activity di dettaglio, l'intent con il parametro ce l'hai richiamando il metodo getIntent() di Activity.
Ciao, Fabio

Carontes
07-07-11, 17:40
Ho risolto per metà il mio problema, spero che per l'altra metà tu mi possa dare una mano. Nella mia applicazione oltre all'activity di ricerca ho anche una ExpandableList, con i suoi parent e child. Quando clicco su un child mi si apre il layout con tutte le informazioni di quel child (che naturalmente si trovano nei file xml). Così ho deciso di mettere l'intent per quella classe nel listener della ListView dell'activity di ricerca. Funziona, ovvero mi appare il layout che mi appare se clicco sui child, ma invece che visualizzarmi le informazioni riesco a vedere solo le scritte TextView e l'icona della mia applicazione. Come posso risolvere in modo che mi visualizzi tutto alla perfezione?

Activity di Dettaglio:


Solo gli utenti registrati possono visualizzare il codice. Only registered members can view code.

E questo è l'intent sul listener:



Solo gli utenti registrati possono visualizzare il codice. Only registered members can view code.

fabioCollini
07-07-11, 20:00
Ciao, secondo me devi cambiare il listener per aggiungere un parametro nell'Intent. Qualcosa del tipo:

intent.putExtra("selectedChild", getItem(position));

In pratica aggiungi qui il parametro che poi riprendi nell'activity di dettaglio. Per poterlo aggiungere la classe Child deve implementare l'interfaccia Serializable.
Ciao, Fabio


Ho risolto per metà il mio problema, spero che per l'altra metà tu mi possa dare una mano. Nella mia applicazione oltre all'activity di ricerca ho anche una ExpandableList, con i suoi parent e child. Quando clicco su un child mi si apre il layout con tutte le informazioni di quel child (che naturalmente si trovano nei file xml). Così ho deciso di mettere l'intent per quella classe nel listener della ListView dell'activity di ricerca. Funziona, ovvero mi appare il layout che mi appare se clicco sui child, ma invece che visualizzarmi le informazioni riesco a vedere solo le scritte TextView e l'icona della mia applicazione. Come posso risolvere in modo che mi visualizzi tutto alla perfezione?

Activity di Dettaglio:


Solo gli utenti registrati possono visualizzare il codice. Only registered members can view code.

E questo è l'intent sul listener:



Solo gli utenti registrati possono visualizzare il codice. Only registered members can view code.

Carontes
09-07-11, 00:15
Ho provato con tutti i listener possibili, OnItemClickListener - OnItemSelectedListener - anche con OnListItemClickListener, ma non funziona.

fabioCollini
12-07-11, 09:43
Ciao, secondo me l'evento giusto è OnItemClickListener. Puoi spiegarti meglio, cosa è che non funziona? Parte l'activity di dettaglio e non carica i dati? O non parte per niente?
Ciao, Fabio

Ho provato con tutti i listener possibili, OnItemClickListener - OnItemSelectedListener - anche con OnListItemClickListener, ma non funziona.

Carontes
12-07-11, 11:30
Il listener è lo stesso che ho messo io, l'activity di dettaglio parte con il relativo layout ma non carica i dati, dove ci dovrebbero essere i dati compilati da me escono soltanto le scritte TextView. Credo sia dovuto a questo
Solo gli utenti registrati possono visualizzare il codice. Only registered members can view code.. Ho anche altre activity (quelle che visualizzano ExpandableList e che hanno un intent sui child per l'activity di dettaglio) che "passano" per l'activity di dettaglio e posto l'intent che sta sul child
Solo gli utenti registrati possono visualizzare il codice. Only registered members can view code.

Una cosa del genere nell'intent della ListView non funziona, il secondo selectedChild di intent.putExtra viene visto come errore se lo inserisco nell'activity della ListView.

fabioCollini
12-07-11, 22:30
Ciao, ma quindi il problema è che l'oggetto selectedChild è null? O che non viene letto correttamente nell'activity di dettaglio?
Metti un log (o un system.out) almeno puoi circoscrivere il problema.

Carontes
12-07-11, 23:32
Il problema è che se scrivo nel listener della ListView
Solo gli utenti registrati possono visualizzare il codice. Only registered members can view code.

mi viene segnalato come errore il secondo selectedChild e forse per questo non vengono visualizzato bene i dati nel layout. Ho un link con un pezzo del progetto, se puoi dagli un'occhiata così capisci meglio quello che voglio dire. http://www.mediafire.com/?yp16z8cdy2jtd7m

fabioCollini
14-07-11, 14:10
Ciao, quale è l'errore preciso che ti dà? Puoi incollare lo stack trace?

Carontes
14-07-11, 17:06
Se intendi il logcat non posso incollare nulla perchè l'errore me lo da direttamente nell'activity e quindi non posso nemmeno salvare l'activity. In pratica quando scrivo selectedChild esce la linea rossa sotto la scritta e se ci passo sopra mi da i diversi fix da poter inserire al posto di selectedChild. Se però clicco sulla ListView funzionante (ovvero senza intent.putExtra) il logcat mi da queste stringhe

07-14 16:58:51.216: INFO/ActivityManager(146): Starting activity: Intent { cmp=it.caronte.bar/.Details }
07-14 16:58:51.626: WARN/ResourceType(146): Skipping entry 0x7f040001 in package table 0 because it is not complex!
07-14 16:58:51.636: WARN/ResourceType(146): Skipping entry 0x7f040005 in package table 0 because it is not complex!

fabioCollini
14-07-11, 17:10
Ma quindi è un errore in compilazione? Se salvi il file lo vedi nella view "problems" di Eclipse insieme agli errori di compilazione? Puoi incollare quello?

Carontes
15-07-11, 00:02
Credo sia questo quello che mi hai chiesto:



Solo gli utenti registrati possono visualizzare il codice. Only registered members can view code.

fabioCollini
15-07-11, 18:48
Ciao, ho scaricato e provato il progetto che hai condiviso e a me funziona. Ovviamente non popola tutti i text view nel dettaglio visto che popoli solo il primo e l'immagine ma il passaggio di parametri da una activity all'altra funziona. L'errore che hai incollato dice che non riesce a trovare la variabile selectedChild, l'hai definita nel metodo?
Secondo me va bene il metodo che hai messo nella activity del progetto che hai condiviso:

public boolean onChildClick(ExpandableListView parent, View v,
int groupPosition, int childPosition, long id)
{
final Child selectedChild = groups.get(groupPosition).
getChildren().get(childPosition);
final Intent intent = new Intent(this, Details.class);
intent.putExtra("selectedChild", selectedChild);
startActivity(intent);
return true;
}

Ciao, Fabio

Carontes
15-07-11, 21:07
Si quella va bene perchè quella activity funziona, ma tu devi aggiungere l'activity Search (che si trova all'inizio di questa discussione. Nel progetto postato non c'è perchè l'ho postato tempo fa, quando ancora non avevo creato l'activity Search).

Carontes
24-07-11, 16:00
Nessuna novità sulla possibile soluzione del progetto?

fabioCollini
26-07-11, 17:30
Ciao, scusa ma mi sono un po' perso, puoi incollare il codice del metodo che ti dà l'errore:


selectedChild cannot be resolved to a variable Search.java /Bartenders/src/it/caronte/bar line 52 Java Problem

Il problema sembra essere di una variabile non definita.

Carontes
26-07-11, 19:03
Ho uploadato il progetto con l'activity search (da attivare tramite menù). Come puoi vedere non carica le informazioni nel layout passando dalla classe details. http://www.mediafire.com/?8j8rj1uhdb7w5on

fabioCollini
26-07-11, 21:00
Ciao, adesso ho capito, stai usando la stessa activity di dettaglio partendo da due liste. Però l'activity di dettaglio si aspetta dentro l'intent un oggetto di tipo Child, nell'Activity di ricerca non ce l'hai in quanto il modello dei dati è un array di String.
Forse dovresti caricare i dati dal file xml anche nel caso dell'activity di ricerca in modo da avere degli oggetti Child in entrambi i casi.
Ciao, Fabio

Carontes
27-07-11, 01:08
Non ho capito bene cosa dovrei fare. Dovrei importare
Solo gli utenti registrati possono visualizzare il codice. Only registered members can view code. ecc. anche nell'activity di ricerca? Se è così ci ho già provato ma senza risultati.

fabioCollini
28-07-11, 18:53
No, il problema è che nell'activity in cui funziona hai come elementi dell'adapter collegato alla expandable list gli oggetti presi dal file xml. Nell'activity di ricerca hai semplici stringhe, quindi quando clicchi su un elemento della lista hai solo la stringa e non tutti i dati per popolare il dettaglio. Quindi o carichi all'inizio tutti i dati dal file xml o carichi i dati che ti servono sul click prima di andare nel dettaglio.

Carontes
29-07-11, 16:20
Dovrei per caso usare un metodo simile alla comparsa di un toast?

Solo gli utenti registrati possono visualizzare il codice. Only registered members can view code.

E se così fosse devo usare il parametro "view" o il "position"? Scusa se rompo ma ho solo le basi di android, avresti un piccolo esempio su come procedere da mostrarmi?