如何使用baseadapter从gridview中删除项目而不刷新所有项目

时间:2011-08-18 09:11:47

标签: android gridview android-asynctask baseadapter

背景 我正在使用baseadapter填充gridview和imageview。使用AsyncTask下载Imageview的资源。我收到来自 onPostExecute 方法的回调为 成功 失败 < / strong>即可。我在适配器的 getView 方法中使用此回调。

问题 如果imageview的url返回404错误,则gridview因404错误而有一些空格。我可以删除那些项目并调用notifydatasetchanged,但这次它从一开始就刷新所有gridview。虽然我在某处保留了错误的项目,但删除它们并一次性调用notifydatasetchanged,看起来gridview在应用程序中填充了两次。

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

我希望我的问题很明确。谢谢你的帮助。

1 个答案:

答案 0 :(得分: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);
    }

}