Android 获取所有ListView项(行)
如何获取Android 获取所有ListView项(行),android,android-listview,Android,Android Listview,如何获取列表视图项的所有子项? 有一些方法可以在位置获取child,但我找不到任何方法可以返回ListView项中所有子项的集合 更新:我刚刚发现我需要列表视图项(行)。我如何才能做到这一点? 我正在做的是,将所选的列表视图项与所有项进行比较。您通过如下迭代从列表适配器获得所有列表项 for (int i=0;i<adapter.getCount();i++){ adapter.getItem(i); } for(int i=0;i可能是您正在寻找类似的内容。您需要访问根视图,
列表视图
项的所有子项?有一些方法可以在位置获取child,但我找不到任何方法可以返回
ListView
项中所有子项的集合
更新:我刚刚发现我需要列表视图
项(行)。我如何才能做到这一点?我正在做的是,将所选的
列表视图
项与所有项进行比较。您通过如下迭代从列表适配器获得所有列表项
for (int i=0;i<adapter.getCount();i++){
adapter.getItem(i);
}
for(int i=0;i可能是您正在寻找类似的内容。您需要访问根视图,从中可以获取子视图。onItemSelected仅用于提供单击位置的根视图
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
}
public void已选择(AdapterView父视图、视图视图、整数位置、长id){
ImageView imgView=view.findViewById(R.id.myImageView);//在适配器的getView()内膨胀的ImageView
//其他观点也是如此
}
使用此方法获取列表视图的所有透视图和外视图:
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);
}
}
for(int i=0;ilastListItemPosition){
返回listView.getAdapter().getView(位置,listView.getChildAt(位置),listView);
}否则{
final int childIndex=位置-firstListItemPosition;
返回listView.getChildAt(childIndex);
}
}
我想如果列表视图中的项目属于视图组类型,您可以执行以下操作
ArrayList<View> children = new ArrayList<View>();
for (int i = item.getChildCount() - 1 ; i>=0; i--) {
children.add(item.getChildAt(i));
}
ArrayList children=new ArrayList();
对于(int i=item.getChildCount()-1;i>=0;i--){
添加(项目.getChildAt(i));
}
不完全清楚为什么要这样做,但是直接从适配器中提取所有数据不是更好吗?而不是从ListView中提取视图。我在item.getChildCount()中发现了一个bug
。我需要抓取一个项目并为其背景上色,getChildAt
显然只在项目太多时返回可见的子项
ArrayList<View> children = new ArrayList<View>();
for (int i = item.getChildCount() - 1 ; i>=0; i--) {
children.add(item.getChildAt(i));
}