Domanda

Ho un ListView supportato da ArrayAdapter personalizzato in cui ogni elemento ha 2 LinearLayout - uno che chiamo head e l'altro - body. Il corpo è nascosto (scomparso) fino a quando l'utente non fa clic sulla riga quando scorre. Il secondo clic (sulla testa) nasconderà il corpo. Tuttavia, se l'utente fa clic sul corpo, porta un'altra attività. Tutto questo funziona bene, ecco che arriva il problema:

Quando l'utente preme sul corpo, voglio un'indicazione visiva dell'azione nello stesso modo in cui la voce di elenco normale sfarfalla uno sfondo arancione quando viene premuto. Non lo ricevo per impostazione predefinita poiché (la mia teoria) l'evento onPress viene intercettato dalla vista del corpo e non elaborato dalla voce di elenco.

La prima cosa che ho provato è stata eseguire body.setBackground('#ff00ff') (non importa il colore) nell'evento onPress. Non ha funzionato dal momento che (sospetto) dopo la chiamata non è possibile riverniciare. Quindi ho scavato un po 'di più e ho deciso di utilizzare <selector/> - sfondo basato. Ho definito body_background.xml nella drawable cartella e l'ho assegnato alla proprietà di sfondo del corpo.

Lì ho notato che lo sfondo cambierà solo se il pari viene elaborato dall'elenco. Ad esempio, se imposto <item android:state_selected="true" android:drawable="@drawable/selected"/>, quando premo sulla testa - lo sfondo di entrambi gli elementi (testa e corpo) cambierà, tuttavia quando premo sul corpo - niente.

Quindi, per riassumere la mia domanda: come posso cambiare lo sfondo dell'elemento figlio nella voce di elenco se gli assegno un gestore onClick personalizzato? Eventuali suggerimenti saranno molto apprezzati

È stato utile?

Soluzione

OK. Ecco alcune altre informazioni che scavo lungo la strada.

  1. Attualmente sto cercando di passare l'implementazione a ExpandableListView che fornisce la funzionalità che ho dovuto codificare (corpo scorrevole). Il problema che potrei avere qui è che ho un & Quot; infinito & Quot; implementazione dell'elenco e sto usando il metodo aggiungi ArrayAdapter # per aggiungere dinamicamente elementi all'elenco durante lo scorrimento (vedi il mio tutorial su androidguys.com ) Bene, add manca il metodo BaseExpandableListAdapter, quindi devo vedere se l'aggiunta di elementi all'array interno funzionerà (non ha funzionato per ArrayAdapter) eventualmente eseguendo ExpandableListView # notifyChanged () si occuperà di ciò
  2. Il fatto che non vedo nulla quando utilizzo direttamente il metodo setBackgroundColor è probabilmente dovuto alla successiva chiamata a startActivity che interrompe tutto il disegno finché non viene visualizzata la nuova attività

P.S. questo è stato risolto passando a ExpandableListView. E posso aggiungere - è bellissimo! Non c'è bisogno di inventare nulla

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top