0

背景: baseadapter を使用して、グリッドビューをイメージビューで埋めています。Imageview のリソースは、AsyncTask を使用してダウンロードされます。onPostExecuteメソッドからsuccessまたはfailureとしてコールバックを取得します。そして、このコールバックをアダプターのgetViewメソッドで使用します。

問題 imageview の URL が 404 エラーを返した場合、404 エラーが原因で gridview にいくつかの空のスペースがあります。これらのアイテムを削除して notifydatasetchanged を呼び出すことはできますが、今回はすべてのグリッドビューを最初から更新します。エラーが発生したアイテムをどこかに保持し、それらを削除して、notifydatasetchanged を 1 回呼び出しますが、アプリケーションで gridview が 2 回塗りつぶされているようです。

質問 gridview に隙間なく画像を読み込みたいです。たとえば、9 つの画像があり、4 番目と 6 番目の画像が 404 エラーを返す場合、グリッドビューで 7 つの項目のみを表示したい

私の質問が明確であることを願っています。ご協力いただきありがとうございます。

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 に答える