我尝试使用ListView.indexOfChild(View视图)方法来检查ListView是否包含指定的标题视图,但有时当ListView实际包含指定的标题时它返回-1。有没有更好的方法来检查这个?
答案 0 :(得分:17)
如果按“标题”表示使用addHeaderView(...)
方法添加的实际标题,您只需使用getHeaderViewsCount()
检索添加标题的数量。
或者,如果我没记错的话,ListView
如果它包含页眉和/或页脚,它会将其适配器包装在HeaderViewListAdapter
内。您可以使用其getHeadersCount()
检索与上述相同的号码。
修改:如果要检查是否添加了特定标头,您应该可以查询HeaderViewListAdapter
。您需要某种标准来检查。
例如,如果ListView
中有3个标题,您可以迭代前三个项目(您可以直接从HeaderListViewAdapter
抓取它们,或使用ListView
} getItemAtPosition(...)
方法)并查看是否符合条件。执行此“匹配”的最简单方法可能是使用addHeaderView(...)
方法添加标头,该方法也采用Object
参数。您可以提供基本上可以区分多个标头的任何内容,显然只要数据对象不同。例如。你可以传入一个字符串。
有了这些数据,您可以为前3个位置调用getItem(...)
/ getItemAtPosition(...)
并检查返回的内容。对数据使用String的好处是每个Java对象都实现了一个toString()
方法,然后您可以利用该方法进行简单的.equals(..)
比较。
或者,您可以使用反射来获取实际的mHeaderViewInfos
成员变量(只是ArrayList<ListView.FixedViewInfo>
),并将其用于条件逻辑。