2014-09-13 246 views
6

如何获得ListView项目的所有子项?
有方法让孩子在位置,但我无法找到任何方法返回ListView的项目中的所有儿童的集合。获取所有ListView项目(行)

更新:我刚发现我需要ListView项目(行)来代替。我怎样才能做到这一点?
我在做的是,比较所选项目ListView与所有项目。

+0

不完全确定你为什么要这样做,但是直接从适配器中提取所有数据不是更好吗?而不是从ListView中拉取视图。 – 2014-09-13 11:24:32

回答

4

你从列表适配器的所有列表项,通过迭代如下

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

更新

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

请参阅更新的问题。 – Nitish 2014-09-13 10:07:15

1

五月:您可以使用索引,带有表适配器下的所有项目比较特殊项目当你正在寻找这样的事情。您需要有权访问rootView,您可以从中获取子视图。 onItemSelected仅用于提供点击位置的rootview。

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

使用此方法来获取所有的洞察力和出视线视图列表视图:

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

我想如果在ListView你的项目类型ViewGroup你可以做以下

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

这应该是被接受的答案。 – josh123a123 2017-03-03 19:15:04