как удалить элемент из gridview с помощью baseadapter, не обновляя все элементы - PullRequest
0 голосов
/ 18 августа 2011

Фон: Я заполняю gridview просмотрами изображений, используя baseadapter.Ресурсы Imageview загружаются с использованием AsyncTask.Я получаю обратный вызов от метода onPostExecute как успех или сбой .И я использую этот обратный вызов в методе getView адаптера.

Проблема Если url для viewview возвращает ошибку 404, в gridview есть несколько пустых мест из-заОшибка 404Я могу удалить эти элементы и вызвать notifydatasetchanged, но на этот раз он обновляет всю сетку с самого начала.Хотя я храню ошибочные элементы где-то, удаляю их и вызываю notifydatasetchange один раз для всех, кажется, что gridview заполняется дважды в приложении.

Вопрос Я хочу загрузить изображенияв gridview без каких-либо пробелов.Например, если есть 9 изображений, и четвертое, и шестое изображения возвращают ошибку 404, то я хочу видеть только семь элементов в gridview

Надеюсь, мой вопрос ясен.Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 25 августа 2011

Я решил свою проблему следующим образом.Когда я ловлю обратный вызов из-за ошибки 404, в методе getad baseadapter метод

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

}
...