Autore Topic: Cambio colore testo in una ListView a seguito di un evento (esempio gps)  (Letto 2456 volte)

Offline xvcrxkybax

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    acer liquid a1
  • Sistema operativo:
    windows 7
Salve a tutti sono nuovo del forum. sono un ingegnere informatico di napoli che sta impazzendo vicino ad android ... ho 2 settimane per terminate un progetto che usa un po di tutto. L' idea che adesso mi ha fatto incrontrare molti problemi è voler intercettare un evento dal gps e dopo una elaborazione far diventare di colore diverso un elemento della listview della mia attivita. Adesso partendo da cose piu semplici vorrei prima realizzare il cambio di colore dell' elemento a seguito della pressione dell' elemento della listview. Ho letto sul sito e altri siti vari tutorial ma non sono riuscito a capire come fare bene ... mi sono confuso tra arrayadapter e custom adapter ... e non ne sto uscendo piu. Io credo che non mi servano i custom adapter perke la lista è semplice senza essere fatta da piu elementi. Vi posto il codice sperando che qualcuno mi faccia capire bene cosa devo fare :

.... CODICE ININFLUENTE CON ACCESSO A DATABASE FUNZIONANTE

 
Codice (Java): [Seleziona]
        ListView listView = (ListView) findViewById(R.id.ListaPDI);
listView.setAdapter(arrayAdapter);

listView.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
                [glow=red,2,300]ListView listView = (ListView) adapterView;
                ArrayAdapter<String> arrayAdapter = (ArrayAdapter<String>) listView.getAdapter();
                listView.getItemAtPosition(position);
                TextView text=(TextView)listView.getItemAtPosition(position);
                text.setTextColor(Color.RED);[/glow]
                String item = arrayAdapter.getItem(position);
                Toast toast = Toast.makeText(TourGpsActivity.this, "Hai toccato " + item, Toast.LENGTH_SHORT);
                toast.show();
        }
});

listView.setOnItemLongClickListener(new OnItemLongClickListener() {
       
       
       
        @Override
        public boolean onItemLongClick(AdapterView<?> adapterView, View view, int position, long id) {
                ListView listView = (ListView) adapterView;
                ArrayAdapter<String> arrayAdapter = (ArrayAdapter<String>) listView.getAdapter();
                String item = arrayAdapter.getItem(position);
                //da questa stringa faccio l accesso al database e mi prendo la via!!!!!!
       
               
                Toast toast = Toast.makeText(TourGpsActivity.this, "Hai toccato " + item + " a lungo", Toast.LENGTH_SHORT);
                toast.show();
                return true;
        }
});
    }
}
ho evidenziato il codice che credo debba modificare di molto. MA non riesco a capire come modificarlo per accedere all' elemento premuto e modificare il colore del testo

grazie per l' aiuto



« Ultima modifica: 18 Giugno 2011, 17:25:23 CEST da Ricky`, Reason: tasto code! »

Offline xvcrxkybax

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    acer liquid a1
  • Sistema operativo:
    windows 7
Re:Cambio colore testo in una ListView a seguito di un evento (esempio gps)
« Risposta #1 il: 18 Giugno 2011, 18:21:54 CEST »
0
Vedendo da un altro thread ho provato ad accedere al TExtview della lista con questo codice:

Codice (Java): [Seleziona]
ListView listView = (ListView) adapterView;
                TextView testo=(TextView)view.findViewById(R.id.listItemTextView);
                testo.setTextColor(Color.RED);

ma quando premo su un elemento si colora di rosso ma si colora anche un altro elemento spesso a caso di rosso ... quindi non va bene. Dove sbaglio?
« Ultima modifica: 20 Giugno 2011, 11:45:05 CEST da 7h38ugg3r, Reason: il codice java mettilo tra i tag. »

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Cambio colore testo in una ListView a seguito di un evento (esempio gps)
« Risposta #2 il: 20 Giugno 2011, 11:46:51 CEST »
0
non lo vedo dal codice, comunque, se stai utilizzando un layout per ogni row della view, non puoi prenderti genericamente una view in questo modo:

Codice (Java): [Seleziona]
TextView testo=(TextView)view.findViewById(R.id.listItemTextView);

perché con quell'id ne avrai tante.
Piuttosto, devi identificare la posizione della riga di cui vuoi cambiare colore, prenderla in base alla posizione, cambiare colore e aggiornare il tutto.

7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline xvcrxkybax

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    acer liquid a1
  • Sistema operativo:
    windows 7
Re:Cambio colore testo in una ListView a seguito di un evento (esempio gps)
« Risposta #3 il: 20 Giugno 2011, 12:36:09 CEST »
0
dopo un attento studio di listcustom e adattatori ho ristrutturato tutto il codice per farlo piu corretto come molti su questo sito hanno consigliato in altri thread. Sono riuscito a far vedere la lista con 2 textview una di fianco all' altra, e quando premo sull' elemento la seconda scritta cambia da visitato non visitato a visitato; bene, pero non sono riuscito a cambiare il colore sia di background che del testo della riga ... mi cambia sempre a caso il colore degli elementi della lista ... non riesco ad accedere all elemento iesimo e cambiare il colore della textview... come posso fare? vi posto il codice:

Codice (Java): [Seleziona]
@Override
                        public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
                               
                                ArrayAdapter<PDI> arrayAdapter1 = (ArrayAdapter<PDI>) listView.getAdapter();
                               
                                PDI item = arrayAdapter1.getItem(position);

con questo codice accedo all' elemento iesimo in modo corretto e ne modifico il contenuto.. PDI e un classe fatta da 2 textview ... che gestisco con un adattatore custom ArrayAdapter<PDI> dove ho esteso getview ...

vorrei sapere come posso fare all' evento onclick sull' elemento della lista cambiare in modo permanente il colore o del testo o del background dell elemento.

ho provato con:

adapterView.getChildAt(position).setBackgroundColor(Color.RED);

ma non va ... cambia a caso i colori ... e poi non in modo permanente con lo scroll cambiano i colori come vengono distribuiti ....

ho provato con la funzione findviewbyid .... chiamata sulla view passata come secondo paramentro al clicklistener ... ma sempre la stessa cosa ... cambia a caso i colori ....

qualcuno sa come posso fare? anche perke il mio scopo ultimo e cambiare il colore della scritta a seguito di un elaborazione di un evento scatenato dal gps .... spero che qualcuno mi riesca ad illuminare ... grazie in anticipo



                 
« Ultima modifica: 20 Giugno 2011, 12:45:34 CEST da 7h38ugg3r, Reason: IL CODICE DEVI METTERLO TRA GLI APPOSITI TAG. »

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Cambio colore testo in una ListView a seguito di un evento (esempio gps)
« Risposta #4 il: 20 Giugno 2011, 12:47:30 CEST »
0
Seconda volta che sistemo il tuo post: devi utilizzare i tag di codice java quando scrivi codice.

Nell'itemClick, c'è un parametro che è la View sulla quale hai cliccato.
Prova ad utilizzare quella, castandola alla tua View della row.

Affinché rimanga permanente il cambio di colore, devi conservare l'informazione sull'adapter, in modo che se incontra quella riga, la renderizza in maniera differente.
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline xvcrxkybax

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    acer liquid a1
  • Sistema operativo:
    windows 7
Re:Cambio colore testo in una ListView a seguito di un evento (esempio gps)
« Risposta #5 il: 20 Giugno 2011, 13:01:30 CEST »
0
mi scuso innanzitutto per il fatto della impaginazione del codice ... cmq ... come posso fare per far ricordare all' adapter che e cambiata la riga e quindi per renderizzare bene? il codice per far ciò dove lo metto? non credo del override del getview???
come dici tu dovrei fare:

Codice (Java): [Seleziona]
LinearLayout lay=(LinearLayout) view.findViewById(percorso della riga della lista);
TextView testo2=(TextView)lay.findById(id dell elemento testo2);
testo2.setTextColor(Color.RED);


e poi? cosi non so se fuziona ma come faccio a far rimanere stabile il risultato e che non mi cambia con lo scroll? grazie per l' aiuto

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Cambio colore testo in una ListView a seguito di un evento (esempio gps)
« Risposta #6 il: 20 Giugno 2011, 13:05:28 CEST »
0
utilizza un custom adapter, così puoi tenere conto di quale riga stai renderizzando.

Intanto comincia con il farti cambiare colore alla riga corretta.
prova con quel pezzo di codice.
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline xvcrxkybax

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    acer liquid a1
  • Sistema operativo:
    windows 7
Re:Cambio colore testo in una ListView a seguito di un evento (esempio gps)
« Risposta #7 il: 20 Giugno 2011, 13:13:41 CEST »
0
per ora non va ... premo sul primo elemento e mi cambia il 6 o 7 o qualche altro a caso. Con questo codice:

Codice (Java): [Seleziona]
LinearLayout lay=(LinearLayout) view.findViewById(R.id.ROW);
TextView testo2=(TextView)lay.getChildAt(1);
testo2.setTextColor(Color.RED);
view.refreshDrawableState();
arrayAdapter1.notifyDataSetChanged();


gli ultimi 2 metodi non ho capito bene cosa facciano ... pero ho letto da qualche parte che avevano a che fare con l' aggiornamento dello stato ... l' ultimo sicuro mi è servito per notificare il cambio della textview nell' adattatore ... cosa c e che non va nel codice e come posso fare? grazie

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Cambio colore testo in una ListView a seguito di un evento (esempio gps)
« Risposta #8 il: 20 Giugno 2011, 13:37:39 CEST »
0
quel View che ti arriva nell'onclicklistener, è il tuo Linearlayout, cioè il layout della row.
Quindi devi solo castare la View in LinearLayout.
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline xvcrxkybax

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    acer liquid a1
  • Sistema operativo:
    windows 7
Re:Cambio colore testo in una ListView a seguito di un evento (esempio gps)
« Risposta #9 il: 20 Giugno 2011, 14:33:00 CEST »
0
ho midificato il codice ma cmq non va:

Codice (Java): [Seleziona]
                                LinearLayout lin=(LinearLayout)view;
                                TextView testo2=(TextView)lin.findViewById(R.id.personSurname);
                                testo2.setTextColor(Color.RED);
                                view.refreshDrawableState();

dove sto sbagliando? mi continua a modificare il testo di un altro elemento a caso ... che si modifica per di piu con lo scroll ...


Offline xvcrxkybax

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    acer liquid a1
  • Sistema operativo:
    windows 7
Re:Cambio colore testo in una ListView a seguito di un evento (esempio gps)
« Risposta #11 il: 20 Giugno 2011, 15:24:13 CEST »
0
ho letto il link e gli altri link presenti... ma non mi risolve il problema o almeno non ho capito come me lo risolve ... li si parla di cursor adapter per mostrare i dati che vengono dal cursore ... ma come faccio a modificare il colore del testo a seguito del' evento onclicklistener della listview? non ho trovato codice simile in quegli esempi e tutorial ... suggerimenti? grazie