Visualizzazione stampabile
-
1 allegato(i)
Adapter
Guardavo gli esempi di google e quelli del libro di Carli precisamente quello relativo agli ArrayAdapter su ListView. Posto di seguito di seguito il codice :
File main.xml
file row.xml
file array.xml
file java
In allegato metto l'immagine di quello che questo codice genera.
DOMANDA :
Se volessi far assegnare ad ogni pulsante invece che la scritta standard "Pulsante" anche a questi la scritta Value1,Value2, etc come dovrebbe essere il codice ?? :-[
-
La scritta "Pulsante" viene assegnata di default nel file array.xml:
codice:
<Button android:id="@+id/Button01" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="Pulsante">
</Button>
Mentre i valori (Value1, Value2, ...) vemgono assegnati nel file java, quando associ l'array al ArrayAdapter:
codice:
adapter = new ArrayAdapter(this,R.layout.row,R.id.rowText,dati_array);
Non trovo soluzioni semplici...
L'unica soluzione che mi viene in mente, sarebbe intercettare il momento in cui viene fatta l'associazione, e assegnare al pulsante lo stesso valore della TextView
... ma fa schifo.
-
Ammazza non pensavo che io stessi chiedendo una cosa così complicata! o_O
-
1 allegato(i)
Ciao, Mimmog.
Ho trovato un modo per risolvere il tuo quesito, e ho creato il progettino Eclipse che ti allego.
Non e' cosi' semplice, perche' fa uso di ArrayList & HashMap. BTW, non e' tutta farina del mio sacco: ho trovato le info su internet :)
Ho cercato di ridurre al minimo le linee di codice, ma se e' troppo ristretto, cerchero' di essere piu' prolisso :)
Se incontri difficolta' nella comprensione, chiedi pure :)
-
Quote:
Originariamente inviato da
TheCopacabanaMan
Ciao, Mimmog.
Ho trovato un modo per risolvere il tuo quesito, e ho creato il progettino Eclipse che ti allego.
Non e' cosi' semplice, perche' fa uso di ArrayList & HashMap. BTW, non e' tutta farina del mio sacco: ho trovato le info su internet :)
Ho cercato di ridurre al minimo le linee di codice, ma se e' troppo ristretto, cerchero' di essere piu' prolisso :)
Se incontri difficolta' nella comprensione, chiedi pure :)
Mi sembra una soluzione molto elegante, anche se ammetto che il SimpleAdapter sembra un oggetto piuttosto contorto o_O
C'è qualcosa che non capisco... come fa il codice a sapere di dover sostituire le stringe proprio in quei text?
Non mi sembra di vedere riferimenti nel layout alle tag che usi nel codice.
Credevo che la cosa fosse legata alla frase
Quote:
The layout file should include at least those named views defined in "to"
Ma non l'ho capita :p
-
Quote:
Originariamente inviato da
Cymon
come fa il codice a sapere di dover sostituire le stringe proprio in quei text?
Non mi sembra di vedere riferimenti nel layout alle tag che usi nel codice.
Qui dichiaro quali sono le colonne del data map:
codice:
data_map.put("text_del_button", dati_array[i].toString());
data_map.put("text_del_textview", dati_array[i].toString());
cioe' "text_del_button" & "text_del_textview".
Qui associo le colonne dichiarate sopra agli ID di ogni elemento della riga (R.layout.row):
codice:
data_adapter = new SimpleAdapter(this, data_list, R.layout.row, new String[] {"text_del_button", "text_del_textview"}, new int[] {R.id.Row_Button, R.id.Row_Text});
La riga di sopra avrebbe potuto essere scritta cosi':
codice:
String[] nomi_delle_colonne = new String[] {"text_del_button", "text_del_textview"};
int[] id_degli_elementi_di_ogni_riga = new int[] {R.id.Row_Button, R.id.Row_Text};
data_adapter = new SimpleAdapter(this, data_list, R.layout.row, nomi_delle_colonne, id_degli_elementi_di_ogni_riga );
e si sarebbe visto chiaramente che "text_del_button" & "text_del_textview" corrispondevano agli elementi R.id.Row_Button & R.id.Row_Text
... spero di essere stato abbastanza confuso! :)
-
Quote:
Originariamente inviato da
TheCopacabanaMan
... spero di essere stato abbastanza confuso! :)
Abbastanza grazie o_O
Quello che mi chiedevo è se quindi in automatico il metodo vada in automatico a cercare nella configurazione un campo "text" e appiccichi la stringa lì...
Probabilmente però è proprio così... :p
-
Quote:
Originariamente inviato da
TheCopacabanaMan
Ciao, Mimmog.
Ho trovato un modo per risolvere il tuo quesito, e ho creato il progettino Eclipse che ti allego.
Non e' cosi' semplice, perche' fa uso di ArrayList & HashMap. BTW, non e' tutta farina del mio sacco: ho trovato le info su internet :)
Ho cercato di ridurre al minimo le linee di codice, ma se e' troppo ristretto, cerchero' di essere piu' prolisso :)
Se incontri difficolta' nella comprensione, chiedi pure :)
Allora, prima di tutto ti ringrazio per l'impegno :)
Ancora una volta android mi sorprende per il fatto che un operazione così semplice con altri linguaggi qui deve essere fatta con il SimpleAdapter + HasMap..... in php si sarebbe risolto con un cliclo for ed un echo ;)
Comunque, tornando a noi, avevo notato anche io ieri sul libro di Carli un esempio simile al tuo relativo al SimpleAdapter però non mi volevo convincere che una cosa così banale richiedesse il SimpleAdapter. Voglio dire, alla fine avevo un listview che mi scriveva i valori del mio array e volevo solo dirgli di cambiare anche l'etichetta ad ogni button niente di così eclatante.....pensavo bastasse solo una righetta del tipo pulsante.setText o roba del genere quindi ho preferito chiedere.....ed in effetti ora mi rendo conto che "In Android niente è quel che sembra" :)
Grazie per l'aiuto! ;)
-
Quote:
Originariamente inviato da
mimmog
Allora, prima di tutto ti ringrazio per l'impegno :)
Ancora una volta android mi sorprende per il fatto che un operazione così semplice con altri linguaggi qui deve essere fatta con il SimpleAdapter + HasMap..... in php si sarebbe risolto con un cliclo for ed un echo ;)
Mmmh, non so... ;)
Comunque io avrei usato un approccio diverso. Certo, il simpleadapter serve esattamente a quello, ma è un po' troppo contorto. Personalmente mi sarei creato una classe figlia di adapter e mi sarei creato i metodi per fabbricare i bottoni a piacere...
In questo senso l'unica cosa che non mi piace di android è non avere modo di usare un xml di layout per un oggetto view piuttosto che per un activity... In questi casi sarebbe utile, soprattutto per pulizia di codice. Quando ho dovuto fare qualcosa di simile alla fine ho dovuto costruire tutto il blocco istanziando pezzetto per pezzetto nl java...
-
Quote:
Originariamente inviato da
mimmog
una cosa così banale richiedesse il SimpleAdapter.
Io avrei costruito una Table, e l'avrei riempita dinamicamente :)
Quote:
Originariamente inviato da
Cymon
Comunque io avrei usato un approccio diverso.
Cymon, prova a scrivere un progettino di esempio, e vediamo cos'avresti fatto :)
-
Quote:
Originariamente inviato da
TheCopacabanaMan
Io avrei costruito una Table, e l'avrei riempita dinamicamente :)
Cioè ??? :-[
Se postate gli esempi ne discutiamo, sono aperto ad ogni veduta :)
-
1 allegato(i)
Quote:
Originariamente inviato da
mimmog
Se postate gli esempi ne discutiamo, sono aperto ad ogni veduta :)
Mimmog, io ti posto l'esempio, ma poi tu mi offri un gelato! :)
Oki, eccolo...
In pratica creo nel Layout una Table vuota, e poi creo tutti gli elementi in maniera dinamica.
Ho rifatto lo stesso esempio di prima, un bottone & un testo per ogni riga, e intercetto il click di ogni bottone.
-
Quote:
Originariamente inviato da
TheCopacabanaMan
Mimmog, io ti posto l'esempio, ma poi tu mi offri un gelato! :)
Oki, eccolo...
In pratica creo nel Layout una Table vuota, e poi creo tutti gli elementi in maniera dinamica.
Ho rifatto lo stesso esempio di prima, un bottone & un testo per ogni riga, e intercetto il click di ogni bottone.
OK lo guardo subito!!! se sei di Roma o passi da Roma altro che gelato una cena ti offro :)
-
Quote:
Originariamente inviato da
mimmog
Se sei di Roma o passi da Roma ...
Eh si, partendo da qui a Torino, Roma e' giusto dietro l'angolo! :)
Tienimi il gelato in caldo, mi raccomando! :D :D :D
-
Quote:
Originariamente inviato da
TheCopacabanaMan
Eh si, partendo da qui a Torino, Roma e' giusto dietro l'angolo! :)
Tienimi il gelato in caldo, mi raccomando! :D :D :D
Vorrà dire che lo mangerò io adesso che vedo il tuo codice :)
Però però manca quello di Cymon sono curioso di vedere anche la sua soluzione ;)
-
Quote:
Originariamente inviato da
mimmog
Vorrà dire che lo mangerò io adesso che vedo il tuo codice :)
Però però manca quello di Cymon sono curioso di vedere anche la sua soluzione ;)
Stasera magari scrivo qualcosa... ora in ufficio è troppo sfacciato ;)
-
Non me lo fa importare il tuo esempio mi dice : invalid project description
Fatto l'avevo messo nella cartella sbagliata :)
-
Quote:
Originariamente inviato da
mimmog
Non me lo fa importare il tuo esempio mi dice : invalid project description
Dici a me? Porva a creare un progetto tuo, apri i miei files, e ricopiali nel tuo progetto.
Quote:
Originariamente inviato da
mimmog
Fatto l'avevo messo nella cartella sbagliata :)
Ti ammazzo a colpi di gelato! :D :D :D
-
@TheCopacabanaMan : Veramente educativo questo codice ! :) posso chiederti dove li prendi ? ho visto che molti commenti sono in inglese, certo che se prima mi hai chiesto un gelato ora non immagino cosa mi chiederai! roftl
@Cymon : attendiamo con ansia il tuo ritorno a casa ;)
-
Quote:
Originariamente inviato da
mimmog
@TheCopacabanaMan : Ke skifo questo codice ! :) posso chiederti dove li prendi ?
L'ho scritto io. :p Costruivo le tables dinamiche in Asp.Net, quando dovevano contenere roba strana.
Quote:
Originariamente inviato da
mimmog
@ho visto che molti commenti sono in inglese
Ehm, di solito scrivo codice anche per gente estera, chiamala deformazione professionale :)
Quote:
Originariamente inviato da
mimmog
@Cymon : attendiamo con ansia il tuo ritorno
Cymon contro tutti
Il ritorno di Cymon
Cymon colpisce ancora
:D :D :D
-
Bhe che dire ??? COMPLIMENTI ASSAI :) un bel codice pulito pulito mi prendo quasi vergogna a parlare con voi di cose che sicuramente vi sembrano della caxxate :-[:-[ abiate pazienza :)
-
Quote:
Originariamente inviato da
TheCopacabanaMan
Cymon contro tutti
Il ritorno di Cymon
Cymon colpisce ancora
:D :D :D
Così mi'moziono :-[:-[:-[
Comunque, senza stare a scrivere l'app quello che avrei fatto sarebbe stato scrivere una classe estensione di ArrayAdapter
Al suo interno mi sarei poi dedicato a reimplementare il metodo getView
Ed è qui che sarebbero cominciati i dolori. Infatti non sono riuscito a trovare un metodo in android che mi permetta di "disegnare" la view restituita da questo metodo in output tramite XML. Se qualcuno lo conosce e vuole dirmelo gli sarò grato per sempre! :cool:
Non potendo fare una cosa del genere l'unica possibiltà è armarsi di pazienza e istanziare tutto:
Dato questo codice e un array con tutte le stringhe che si vuole usare tipo labels[] è banale inserire qualcosa tipo
ovviamente si chiude tutto con un
La classe madre, all'istanziazione del suo adapter, userà ovviamente questa nuova classe.
Scusatemi se ci sono imprecisioni, non è vero codice, ho buttato giù tutto in fretta per far capire, anche perché ho paura che per farlo funzionante ci sarebbe voluto un po' di tempo... ;)
Ma perché seguire una linea di sviluppo così complessa (e complicata) invece della soluzione di CopacabanaMan?
Innanzitutto quando ho scritto la app che conteneva questa roba non conoscevo il SimpleAdapter ;)
Oltre a ciò questo metodo lascia una libertà molto più vasta. Nel caso in cui lo ho usato, per esempio, in ogni elemento compariva anche un'immagine recuperata da un DB quindi ovviamente le mie necessità erano un po' più vaste di quanto fattibile con il SimpleAdapter.
Infine comunqe avevo già riscritto la classe Adapter per altri motivi e quindi mi è venuto più naturale... se reimplementando viene oltretutto fuori qualcosa di riutilizzabile in diversi progetti averlo anche come classe a sé può essere molto comodo, per i soliti principi di modularità Java.
Spero di avervi confuso a dovere anch'io :cool:
-
Bhe on effetti alla fine hai fatto un estensione dell'arrayadapter ma non avendo trovato il metodo sei tornato a quello che ha fatto Copacabana :-) sicuramente il suo codice come dici é il più logico ma ero curioso di vedere cosa ci avresti proposto :-)
-
Ciao, Cymon. La tua e' una soluzione indubbiamente professionale. C'mplimenti per il lavoro! :)
-
Scusa Copacabana, tornando al tuo primo esempio, quello con gli HasMap per intenderci, se io volessi dare ad ogni pulsante un OnClickListener posso farlo ??
-
Quote:
Originariamente inviato da
mimmog
Scusa Copacabana, tornando al tuo primo esempio, quello con gli HasMap per intenderci, se io volessi dare ad ogni pulsante un OnClickListener posso farlo ??
Certo :)
Prova a farlo tu :)
-
Ci ho provato ma sò proprio de coccio, in pratica prendo il riferimento al Button con il codice
e poi con il codice
unica cosa che quando parte l'applicativo mi dà errore sulla macchina virtuale :( presumo perchè io gli dò il riferimento del button quello che si trova nel file row.xml invece qui i pulsanti sono creati dinamicamente....ho provato anche ad inserire nel ciclo for la riga pulsante.setOnClickListener(this) ma niente da fare SONO UNA CHIAVICAAAAA :'(
-
Quote:
Originariamente inviato da
mimmog
...niente da fare SONO UNA CHIAVICAAAAA :'(
Finisco un po' cio' che sto facendo & gli do' un'occhiata, ok?
-
Si si senza fretta intanto finisco di piangere... :D porca vacca non mi entrerà mai nella capoccia questo android!!! :O
-
1 allegato(i)
Ecco qui, ecco qua.
Trovi il progetto in allegato.
Nota: ho modificato il file row.xml (quello del layout) per aggiungere
codice:
android:onClick="Button_Premuto"
Questo richiama la funzione omonima nel file Mimmog_Activity.java:
codice:
public void Button_Premuto(View view)
...altro gelato? :D :D :D
-
Una vaschetta di gelato ti devo dare!!! :)
Ma quale che è peggio è che ho capito che android non fa proprio per me....:'(
-
Quote:
Originariamente inviato da
mimmog
ho capito che android non fa proprio per me....:'(
Dai, non ti abbattere. Semplicemente, ti manca un po' di esperienza di programmazione.
In dettaglio, non sai cosa i componenti potrebbero fare, e di conseguenza, non sai cosa cercare, e dove.
Neanch'io so tutto (e chi sa tutto? Forse Cymon?), ma so dove cercare le informazioni che mi servono. Ecco, a te manca proprio questo.
Comincia a compilare ed eseguire l'esempio di Google "ApiDemos". Cosi' hai un'idea di che cosa si puo' fare. Quando ti serve una caratteristica, vai a vedere il codice relativo delle ApiDemos, oppure chiedi a Google :)
-
vabbè farò come dici...sono proprio demoralizzato! :'( comunque grazie ;)
-
Quote:
Originariamente inviato da
TheCopacabanaMan
Neanch'io so tutto (e chi sa tutto? Forse Cymon?), ma so dove cercare le informazioni che mi servono. Ecco, a te manca proprio questo.
Certo che no :)
Cymon usa tutto il giorno il boxettino di ricerca su android-devel esattamente come dici te. E sicuramente aver passato anni a navigare i più disparati javadoc mi ha dato una certa mobilità all'interno dei documenti (che comunque in verde pisello androide sono più rilassanti ;))
E comunque, per concludere, purtroppo e per fortuna parliamo di JAVA. JAVA è una severa maestra :-$
-
Quote:
Originariamente inviato da
Cymon
In questo senso l'unica cosa che non mi piace di android è non avere modo di usare un xml di layout per un oggetto view piuttosto che per un activity... In questi casi sarebbe utile, soprattutto per pulizia di codice. Quando ho dovuto fare qualcosa di simile alla fine ho dovuto costruire tutto il blocco istanziando pezzetto per pezzetto nl java...
Posto una cosa che sono sicuro Cymon apprezzerà un casino
Questo è il mio layout per la row:
E' questo è il mio adapter ;)
Questo adapter lo uso per popolare una ListView con un array di oggetti nel modo seguente:
EDIT: corretto un piccolo errore nel codice
-
Fiiiigo :p
Ora non ho molta testa per studiarlo, ma sembra effettivamente quello che cercavo! Sicuramente è più pulito che montare tutto pezzo a pezzo via JAVA!
-
Quote:
Originariamente inviato da
Cymon
Fiiiigo :p
Ora non ho molta testa per studiarlo, ma sembra effettivamente quello che cercavo! Sicuramente è più pulito che montare tutto pezzo a pezzo via JAVA!
LayoutInflater serve proprio a questo ;)