【问题标题】:Get all ListView items(rows)获取所有 ListView 项目(行)
【发布时间】:2014-09-13 09:22:41
【问题描述】:

如何获得ListView 的所有子项?
有一些方法可以让孩子处于某个位置,但我找不到任何方法可以返回 ListView 项目中所有孩子的集合。

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

【问题讨论】:

  • 不完全确定为什么要这样做,但是直接从适配器中提取所有数据不是更好吗?而不是从 ListView 中提取视图。

标签: android android-listview


【解决方案1】:

您通过迭代从列表适配器获取所有列表项,如下所示

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

【讨论】:

    【解决方案2】:

    使用此方法获得列表视图的所有洞察力和外视视图:

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

    【讨论】:

      【解决方案3】:

      我猜如果您在 ListView 中的项目属于 ViewGroup 类型,您可以执行以下操作

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

      【讨论】:

      • 我遇到了item.getChildCount() &lt; adapter.getCount() 的错误。我需要抓取一个项目并为其背景着色,如果项目太多,getChildAt 显然只会返回可见的孩子
      【解决方案4】:

      也许你正在寻找这样的东西。您需要有权访问 rootView,您可以从中获取子视图。 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 
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-02
        • 2011-06-17
        相关资源
        最近更新 更多