获取lListView上的所有完整可见对象

Koo*_*oki 17 android listview

我有一个ListView,它包含更多元素,然后我可以一次显示.现在我想让所有元素的索引完全可见( - >除了那些只是部分可见的元素).这时我使用getFirstVisiblePosition()getLastVisiblePosition()for-loop迭代他们,但我想这些方法是不准确的.

有没有更好的解决方案?

Sam*_*Sam 30

ListView将其行组织在一个自上而下的列表中,您可以使用该列表进行访问getChildAt().所以你想要的很简单.让我们得到第一个和最后一个视图,然后检查它们是否完全可见:

// getTop() and getBottom() are relative to the ListView, 
//   so if getTop() is negative, it is not fully visible
int first = 0;
if(listView.getChildAt(first).getTop() < 0)
    first++;

int last = listView.getChildCount() - 1;
if(listView.getChildAt(last).getBottom() > listView.getHeight())
    last--;

// Now loop through your rows
for( ; first <= last; first++) {
    // Do something
    View row = listView.getChildAt(first);
}
Run Code Online (Sandbox Code Playgroud)

加成

现在我想让所有元素的索引完全可见

我不确定那句话是什么意思.如果上面的代码不是您想要的索引,您可以使用:

int first = listView.getFirstVisiblePosition();
if(listView.getChildAt(0).getTop() < 0)
    first++;
Run Code Online (Sandbox Code Playgroud)

有一个相对于你的适配器的索引(即adapter.getItem(first).)