1

我知道这些方法getFirstVisiblePosition()getLastVisiblePosition()但这些方法仅适用于可见网格,如果您在 中检查元素的可见性,positiongetView(int position, View convertView, ViewGroup parent)会发现它位于可见元素的范围之外(这很有意义)。我可以做些什么来检查某个位置的元素是否可见或已被 gridView/listView 请求。getView(...)在方法本身中返回 true 的东西。

为什么我要这样做:我在 gridView 中显示了一堆图像。必须通过网络获取图像(下载后我会缓存它们),所以我创建了一个 asyncTask 来下载图像,然后将其显示在相应的网格中。由于可能有很多图像并且用户可能会快速向下滚动,我想在onPreExecute()方法中插入一些检查,它可以告诉我它是否可见,否则我现在取消任务。

if (!requested()) {
    this.cancel(true);
}

我正在寻找合适的代码requested()

真的很抱歉这么长的问题,发现真的很难解释。非常欢迎对该问题的任何解决方案或修改。

4

2 回答 2

0

我不确定我是否理解你的问题。你想知道,给定一个特定的位置,这个视图是否曾经被展示过?

如果这就是你想要的,你应该在你的列表/网格适配器中有一个布尔数组。在 getView 函数中,您将该位置设置为 true。然后你只需要实现一个函数来检查某个位置是否为真。

public class MyAdapter extends BaseAdapter {

    private boolean[] hasBeenSeen;

    public View getView (int position, View convertView, ViewGroup parent) {

        hasBeenSeen[position] = true;

        ...
    }

    public boolean checkPosition(int position){
        return hasBeenSeen[position];
    }
}

设置列表/网格内容时,必须初始化布尔数组。

于 2013-06-10T14:03:07.617 回答
0

您可以尝试使用 View.getLocationOnScreen(); 如果 x 和 y 位置在您的屏幕范围内,那么它应该在您的屏幕上。不过,如果它不在您的屏幕上,我不确定它会返回什么。

于 2013-06-10T14:14:04.740 回答