2014-09-13 12 views
6

Wie kann ich alle Kinder eines Elements ListView erhalten?
Es gibt Methoden, um Kind an Position zu bekommen, aber ich konnte keine Methode finden, die Sammlung aller Kinder in einem Element ListView zurückgibt.Erhalten Sie alle ListView-Elemente (Zeilen)

Update: Ich habe gerade herausgefunden, dass ich stattdessen ListView Elemente (Zeilen) brauche. Wie kann ich das erreichen?
Was ich tue ist, den ausgewählten ListView Artikel mit allen Artikeln zu vergleichen.

+0

Nicht ganz sicher, warum Sie das tun, aber wäre es nicht besser, alle Daten direkt aus dem Adapter zu ziehen? Anstatt Ansichten aus der ListView zu ziehen. –

Antwort

4

Sie erhalten alle Listeneintrag aus der Liste Adapter durch Iteration wie unten

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

aktualisieren: Sie bestimmte Artikel vergleichen mit der Liste Adapter alle Elemente, wie unten mit Index:

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

Siehe aktualisierte Frage. – Nitish

1

Mai Suchst du nach so etwas? Sie müssen Zugriff auf die rootView haben, von der Sie die untergeordneten Ansichten abrufen können. onItemSelected wird nur verwendet, da es die Rootansicht der angeklickten Position angibt.

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

Mit dieser Methode können alle Einblick zu bekommen und aus Sicht Ansicht Listenansicht:

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

ich, wenn Ihre Einzelteile sind vom Typ in der ListView erraten ViewGroup Sie die folgende

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

Dies sollte die akzeptierte Antwort sein. – josh123a123

Verwandte Themen