2014-09-13 19 views
6

Jak mogę uzyskać wszystkie dzieci z elementu ListView?
Istnieją metody, aby uzyskać dziecko na miejscu, ale nie byłem w stanie znaleźć żadnej metody, która zwraca kolekcję wszystkich dzieci w pozycji z ListView.Pobierz wszystkie elementy ListView (wiersze)

Aktualizacja: Właśnie dowiedziałem się, że potrzebuję ListView elementów (wierszy). Jak mogę to osiągnąć?
To, co robię, to porównanie wybranego elementu ListView ze wszystkimi przedmiotami.

+0

Nie do końca wiadomo, dlaczego to robisz, ale czy nie byłoby lepiej po prostu wyciągnąć wszystkie dane bezpośrednio z adaptera? Zamiast przyciągać widoki z ListView. –

Odpowiedz

4

Otrzymasz wszystkie element listy z listy adapter poprzez iteracji jak poniżej

for (int i=0;i<adapter.getCount();i++){ 
    adapter.getItem(i); 
} 

Aktualizacji: Można porównać konkretną pozycję używając indeksu z listy adaptera wszystkie pozycje, jak poniżej:

for (int i=0;i<adapter.getCount();i++){ 
    if(adapter.get(selectedIndex)==adapter.getItem(i)){ 
     // TODO : write code here item match 
     break; // after match is good practice to break loop instead compare rest of item even match 
    } 
} 
+0

Zobacz zaktualizowane pytanie. – Nitish

1

maja czy szukasz czegoś takiego. Musisz mieć dostęp do rootView, z którego możesz uzyskać widoki podrzędne. onItemSelected jest używany tylko jako daje rootview klikniętej pozycji.

public void onItemSelected(AdapterView<?> parent, View view, int pos,long id) { 
ImageView imgView = view.findViewById(R.id.myImageView);//your imageview that is inflated inside getView() of adapter 
//similarly for other views 
} 
3

Zastosowanie tej metody, aby uzyskać wszystkie wgląd i poza rzut oka widok widoku listy:

for (int i = 0 ; i < listView.getCount() ; i++){ 
    View v = getViewByPosition(i,listView); 
} 

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); 
    } 
} 
1

Chyba jeśli pozycje ListView są typu ViewGroup można wykonać następujące czynności

ArrayList<View> children = new ArrayList<View>(); 
for (int i = item.getChildCount() - 1 ; i>=0; i--) { 
    children.add(item.getChildAt(i)); 
} 
+0

powinno to być zaakceptowaną odpowiedzią. – josh123a123

Powiązane problemy