0

背景: 我正在使用 baseadapter 用 imageviews 填充 gridview。Imageview 的资源是使用 AsyncTask 下载的。我从onPostExecute方法中得到一个回调作为successfailure。我在适配器的getView方法中使用了这个回调。

问题 如果 imageview 的 url 返回 404 错误,则由于 404 错误,gridview 有一些空格。我可以删除这些项目并调用 notifydatasetchanged,但这次它从一开始就刷新了所有 gridview。尽管我将错误的项目保留在某个地方,删除它们并一劳永逸地调用 notifydatasetchanged,但似乎 gridview 在应用程序中填充了两次。

问题 我想在 gridview 中加载图像而没有任何间隙。例如,如果有 9 个图像,第四个和第六个图像返回 404 错误,那么我只想在 gridview 中看到七个项目

我希望我的问题很清楚。谢谢你的帮助。

4

1 回答 1

0

我这样解决了我的问题。当我从 404 错误中捕获回调时,在 baseadapter getview 方法中,

DownloadCallback dc = new DownloadCallback(){

       public void onSuccess(String downloadedString){

       }

       public void onFailure(int callbackID){
          System.out.println("onFailure - " + callbackID);

          if( callbackID < getCount()) // in case of out of index exception
             rows.remove(callbackID); 
          //parent.removeViewAt(callbackID); we cannot remove it is UNSUPPORTED
          reloadFromPosition(callbackID, imageView, parent);
        }
     };

而 reloadFromPosition 方法就是这样;

private void reloadFromPosition(int position, View convertView, ViewGroup parent)
{
    if( position < getCount())
    {
        System.out.println("reloadFrom - if - " + position);
        getView(position, convertView, parent);
        reloadFromPosition(position + 1, parent.getChildAt(position +1), parent);
    }

}
于 2011-08-25T09:59:04.433 回答