Autore Topic: evidenziare voce listview  (Letto 1665 volte)

Offline ROS

  • Utente normale
  • ***
  • Post: 196
  • Respect: +5
    • Mostra profilo
  • Sistema operativo:
    Ubuntu 10.04
evidenziare voce listview
« il: 23 Agosto 2011, 15:27:33 CEST »
0
Ciao a tutti,
ho cercato parecchio sull'argomento, ma non ho trovato una soluzione definitiva e soprattutto funzionante.

Ho un listview, in cui permetto all'utente con un doppio tap di entrare all'interno della voce, con un singolo tap di selezionarla semplicemente. Cio' che vorrei fare e' evidenziare di arancione (o qualunque altro colore :D) la voce corrispondente dopo il primo tap...

Come potrei fare?

Offline ROS

  • Utente normale
  • ***
  • Post: 196
  • Respect: +5
    • Mostra profilo
  • Sistema operativo:
    Ubuntu 10.04
Re:evidenziare voce listview
« Risposta #1 il: 24 Agosto 2011, 16:51:56 CEST »
0
nessuno? :)

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:evidenziare voce listview
« Risposta #2 il: 24 Agosto 2011, 17:43:41 CEST »
0
Non ho esperienza di un metodo facile o automatico per implementarlo. Quello che farei è gestire manualmente il "ridisegno" del singolo elemento e se selezionato (occorre tenere traccia manualmente di quello correntemente selezionato) lo ridisegno in modo diverso.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline ROS

  • Utente normale
  • ***
  • Post: 196
  • Respect: +5
    • Mostra profilo
  • Sistema operativo:
    Ubuntu 10.04
Re:evidenziare voce listview
« Risposta #3 il: 24 Agosto 2011, 18:07:08 CEST »
0
Non ho esperienza di un metodo facile o automatico per implementarlo. Quello che farei è gestire manualmente il "ridisegno" del singolo elemento e se selezionato (occorre tenere traccia manualmente di quello correntemente selezionato) lo ridisegno in modo diverso.
Gia' tengo traccia dell'elemento selezionato, tramite ID, anche perche' poi se viene cliccato due volte lo stesso id apro una seconda finestra.
Quello che mi sfugge e' come al primo tap far si che lo sfondo cambi colore e faccia apparire la riga come "selezionata" :(

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:evidenziare voce listview
« Risposta #4 il: 24 Agosto 2011, 18:13:39 CEST »
0
Guarda questa implementazione di ArrayAdapter con override della getView (è nella getview che io gestirei un "ridisegno" speciale).

Android Series: Custom ListView items and adapters | Software Passion
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Gigiuz

  • Utente normale
  • ***
  • Post: 187
  • Respect: +23
    • Google+
    • gigiuzzo81
    • Gigiuz81
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Note III
  • Play Store ID:
    GGXSoft
  • Sistema operativo:
    Windows 7 64bit, OS X (virtualized), Ubuntu
Re:evidenziare voce listview
« Risposta #5 il: 24 Agosto 2011, 18:39:58 CEST »
0
Anch'io tempo fa cercavo un metodo per fare una cosa del genere e qui sul forum non ho trovato alcuna pratica "indolore" (del tipo prelevi la View dalla lista, ne modifichi la grafica e la rimetti al suo posto).

Poi ho seguito il tutorial Ricky (ListView e custom ArrayAdapter), un po di sano "culo" et voilà, ho risolto il problema.

Questo per dirti che penso non sia fattibile o sia comunque difficilmente fattibile in altro modo che non sia un'implementazione personale di Adapter... :-\

Se poi qualcuno riesce a trovare un modo più semplice ben venga! :D
Hai bisogno di implementare un sistema di "codici seriali di sblocco" nella tua applicazione? Dai un'occhiata alla mia libreria: RemoteUnlocker

Offline ROS

  • Utente normale
  • ***
  • Post: 196
  • Respect: +5
    • Mostra profilo
  • Sistema operativo:
    Ubuntu 10.04
Re:evidenziare voce listview
« Risposta #6 il: 24 Agosto 2011, 18:47:13 CEST »
0
Se poi qualcuno riesce a trovare un modo più semplice ben venga! :D
Come temevo...e a me queste "implementazioni personali" dell'adapter sinceramente mi fanno un po' paura :D Tanto piu' che sto cercando di farne uno per un evento onclick di una imageview in una listview...e procedo a tentativi  :-o

Offline Gigiuz

  • Utente normale
  • ***
  • Post: 187
  • Respect: +23
    • Google+
    • gigiuzzo81
    • Gigiuz81
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Note III
  • Play Store ID:
    GGXSoft
  • Sistema operativo:
    Windows 7 64bit, OS X (virtualized), Ubuntu
Re:evidenziare voce listview
« Risposta #7 il: 24 Agosto 2011, 20:58:05 CEST »
0
[...]e a me queste "implementazioni personali" dell'adapter sinceramente mi fanno un po' paura :D [...]

Forse solo all'inizio può risultare leggermente ostico, poi diventa una cosa abbastanza meccanica e ti renderai conto che è più semplice di quel che pensi ;)
Hai bisogno di implementare un sistema di "codici seriali di sblocco" nella tua applicazione? Dai un'occhiata alla mia libreria: RemoteUnlocker

Offline liuk78

  • Utente junior
  • **
  • Post: 73
  • Respect: +5
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:evidenziare voce listview
« Risposta #8 il: 25 Agosto 2011, 15:12:52 CEST »
0
scusate, molto probabilmente non ho capito io il problema, ma in questi casi non basta usare il tag <selector> ?

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"    
                       android:constantSize=["true" | "false"]    
                       android:dither=["true" | "false"]    
                       android:variablePadding=["true" | "false"] >    
<item android:drawable="@[package:]drawable/drawable_resource"        
         android:state_pressed=["true" | "false"]        
         android:state_focused=["true" | "false"]        
         android:state_selected=["true" | "false"]        
         android:state_checkable=["true" | "false"]        
         android:state_checked=["true" | "false"]        
         android:state_enabled=["true" | "false"]        
         android:state_window_focused=["true" | "false"] />
</selector>
« Ultima modifica: 25 Agosto 2011, 15:14:51 CEST da liuk78 »

Offline ROS

  • Utente normale
  • ***
  • Post: 196
  • Respect: +5
    • Mostra profilo
  • Sistema operativo:
    Ubuntu 10.04
Re:evidenziare voce listview
« Risposta #9 il: 28 Agosto 2011, 00:43:30 CEST »
0
scusate, molto probabilmente non ho capito io il problema, ma in questi casi non basta usare il tag <selector> ?
Ci ho gia' provato ma non riesco a cambiarlo "permanentemente", ma solo nel momento in cui l'utente clicca sulla row  :-\

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re: evidenziare voce listview
« Risposta #10 il: 28 Agosto 2011, 08:50:02 CEST »
0
Hai poi risolto con le idee che ti han suggerito? :)

Sent from my HTC Desire

Offline ROS

  • Utente normale
  • ***
  • Post: 196
  • Respect: +5
    • Mostra profilo
  • Sistema operativo:
    Ubuntu 10.04
Re: evidenziare voce listview
« Risposta #11 il: 28 Agosto 2011, 12:09:36 CEST »
0
Hai poi risolto con le idee che ti han suggerito? :)

Sent from my HTC Desire
Io ho risolto, a naso, implementando nella funzione onItemClick dell'oggetto OnItemClickListener() istanziato a setOnItemClickListener() semplicemente il codice:
Codice: [Seleziona]
this.row        =        parent.getChildAt( position );
this.row.setBackground( 0 , 0 , 0 );

L'oggetto cambia lo sfondo :)

Per gestire il fatto che al primo click il background varia colore ed al secondo, sullo stesso elemento, torna normale, ho impostato prima del codice precedente:
Codice: [Seleziona]
if ( null != this.row )
this.row.setBackgroundColor( Color.rgb( 0 , 0 , 0 ) );
La logica e' che, se l'oggetto e' diverso da null vuol dire che this.row e' stato gia' istanziato (v. codice precedente). Quindi, prima imposto il background del row precedentemente selezionato a quello di default, successivamente imposto this.row con il nuovo valore proveniente da getChildAt(x);

Spero di essere stato sufficientemente chiaro :)