20

如标题:我想知道如何获取我的 AdapterView 中所有当前显示的项目的列表(数组)。
为什么?在我的 AdapterView 中显示的对象需要在用户关闭 AdapterView 后释放一个侦听器。我需要这样做以优化我的应用程序。
或者是否有任何方法(我可以覆盖)在视图销毁时执行?

4

2 回答 2

31

实现 OnScrollListener

public class NewsCategoryDC extends Activity implements OnScrollListener {

并在 listView 中设置 OnScrollListener

listView.setOnScrollListener(NewsCategoryDC.this);

你可以得到第一行和最后一个可见行

@Override
public void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) {
    firstVisibleRow = listView.getFirstVisiblePosition();
            lastVisibleRow = listView.getLastVisiblePosition();
/*Now you get the first and last visible rows, and you easily get the rows from first to last visible row and allocate resources to visible rows or deallocate resources to rows except visible rows..,.*/
}

@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {}

尝试这个..,。

如果您有其他最好的方法请发布,这是非常有用和好问题..,。

谢谢..,。

编辑............................

在 onScroll() 方法中添加代码

@Override
public void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) {
    int firstVisibleRow = listView.getFirstVisiblePosition();
    int lastVisibleRow = listView.getLastVisiblePosition();

    for(int i=firstVisibleRow;i<=lastVisibleRow;i++)
    {
        //Write your code here(allocation/deallocation/store in array etc.)
        System.out.println(i + "=" + listView.getItemAtPosition(i));
    }
}
于 2012-10-30T06:56:17.363 回答
6

作为小提示:

如果您想获得所有完全可见的元素(-> 期望那些位于底部或顶部并且几乎超出屏幕的元素),您应该查看这篇文章:

仅查看完全可见的 ListView-Items

于 2012-11-01T19:41:03.007 回答