Per un'app su cui sto lavorando, sto cercando di ottenere i figli di un controllo ListView. Per fare questo ho il seguente pezzo di codice:Get ListView bambini non visibili
View listItem = mListView.getChildAt(i);
Tuttavia, questo funziona solo per i bambini che sono in vista. Devo anche raggiungere i bambini che non sono in vista. Come lo farei?
EDIT:
Confrontando i metodi suggeriti a quello che stavo già usando trovo la seguente:
RelativeLayout listItem1 = (RelativeLayout) mListView.getAdapter().getView(i, null, mListView);
RelativeLayout listItem2 = (RelativeLayout) mListView.getChildAt(i);
Log.d("Checks", "listItem1: " + listItem1);
Log.d("Checks", "listItem2: " + listItem2);
08-27 14:16:56.628: D/Checks(15025): listItem1: [email protected]
08-27 14:16:56.628: D/Checks(15025): listItem2: [email protected]
08-27 14:16:56.628: D/Checks(15025): listItem1: [email protected]
08-27 14:16:56.628: D/Checks(15025): listItem2: [email protected]
08-27 14:16:56.638: D/Checks(15025): listItem1: [email protected]
08-27 14:16:56.638: D/Checks(15025): listItem2: [email protected]
08-27 14:16:56.638: D/Checks(15025): listItem1: [email protected]
08-27 14:16:56.638: D/Checks(15025): listItem2: [email protected]
08-27 14:16:56.648: D/Checks(15025): listItem1: [email protected]
08-27 14:16:56.648: D/Checks(15025): listItem2: [email protected]
08-27 14:16:56.648: D/Checks(15025): listItem1: [email protected]
08-27 14:16:56.648: D/Checks(15025): listItem2: [email protected]
punti listItem2 al reale View in ListView, che è quello che voglio tranne che funziona solo per i Views che sono in vista. È possibile visualizzare dal file di registro che listItem1 e listItem2 non corrispondono.
EDIT 2:
mi si avvicinò con il seguente:
for (int i = 0; i < mListView.getCount(); i++) {
RelativeLayout listItem = (RelativeLayout) mListView.getAdapter().getView(i, mListView.getChildAt(i), mListView);
}
Questo restituisce correttamente le Visualizzazioni per tutti gli elementi visibili nella lista. Tuttavia, restituisce una vista diversa per quelli che non sono in vista.
EDIT 3:
Grazie a nfirex ho una risposta di lavoro. Ciò restituirà Visualizzazioni anche se non sono direttamente in vista:
public View getViewByPosition(int position, ListView listView) {
final int firstListItemPosition = listView.getFirstVisiblePosition();
final int lastListItemPosition = firstListItemPosition + listView.getChildCount() - 1;
if (position < firstListItemPosition || position > lastListItemPosition) {
return listView.getAdapter().getView(position, listView.getChildAt(position), listView);
} else {
final int childIndex = position - firstListItemPosition;
return listView.getChildAt(childIndex);
}
}
Ciò restituisce effettivamente una visualizzazione. Tuttavia, penso che restituisca una nuova vista al posto di quella che voglio. – Zero
@Zero Quale vista è necessario recuperare? Method ListView.getChildAt (i) restituirà child (è il metodo di ViewGroup), che è stato anticipato dalla scheda. Adapter.getView (pos, oldView, parent) restituirà nuova vista (se oldView == null) o oldView con dati che contiene in Adapter.getItem (pos) per posizione dell'elemento nell'elenco di dati. Si desidera ricevere viste che rimangono anche in ListView per indice? – nfirex
Sto cercando di ottenere la vista che ottengo anche con getChildAt (i), ma per le viste che non sono visibili (se ho 8 elementi sullo schermo e richiedo getChildAt (10), che sarà lì se faccio scorrere verso il basso, ricevo una NullPointerException) – Zero