【问题标题】:how to remove an item from gridview using baseadapter without refreshing all items如何使用baseadapter从gridview中删除一个项目而不刷新所有项目
【发布时间】:2011-08-18 09:11:47
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: android gridview android-asynctask baseadapter


    【解决方案1】:

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

    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);
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      • 2015-10-18
      • 2023-04-06
      • 1970-01-01
      相关资源
      最近更新 更多