Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 获取所有ListView项(行)_Android_Android Listview - Fatal编程技术网

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