1

最初に、サーバーからデータのリストを取得し、リストビューに設定します。

リストビューを下にスクロールすると、サーバーからデータのコレクションが取得され、カスタム アダプターの notifydatasetchanged が呼び出されます。

カスタムアダプターのgetView()メソッドで、サーバーからayntaskで画像をダウンロードしています。正常にダウンロードされ、ローカルに保存されている場合。次に、その非同期タスクの onPostExecute でリスト ビューを更新しようとしています。しかし、それはリフレッシュされていません。

onPostExecute のログは印刷されていますが、リストビューは更新されていません。

public void loadBitmap(MainActivity mainActivity, String imageKey,ImageView imageView, boolean isScrolling) { 最終ビットマップ ビットマップ = getBitmapFromCache(imageKey);

    if (bitmap != null) {
        imageView.setImageBitmap(bitmap);
    } else {
        imageView.setImageResource(R.drawable.ic_launcher);
        if (!isScrolling && !mCurrentTasks.contains(imageKey)
                && mainActivity.internetIsAvailable()) {
            BitmapLoaderTask task = new BitmapLoaderTask(imageKey,
                    mainActivity.getAdapter());
            task.execute();
        }
    }
}

private class BitmapLoaderTask extends AsyncTask<Void, Void, Bitmap> {
    private ListAdapter mListAdapter;
    private String mImageKey;

    public BitmapLoaderTask(String imageKey, ListAdapter adapter) {
        mListAdapter = adapter;
        mImageKey = imageKey;
    }

    @Override
    protected void onPreExecute() {
        mCurrentTasks.add(mImageKey);
    }

    @Override
    protected Bitmap doInBackground(Void... params) {
        Bitmap b = null;
        try {
            URL url = new URL(mImageKey);
            HttpURLConnection connection = (HttpURLConnection) url
                    .openConnection();
            connection.connect();
            b = BitmapFactory.decodeStream(connection.getInputStream());

            if (b != null) {
                int width = b.getWidth();
                int height = b.getHeight();

                if (width >= mMaxWidth || height >= mMaxHeight) {
                    while (true) {
                        if (width <= mMaxWidth || height <= mMaxHeight) {
                            break;
                        }
                        width /= 2;
                        height /= 2;
                    }
                    b = Bitmap.createScaledBitmap(b, width, height, false);
                }

                connection.disconnect();
                addBitmapToCache(mImageKey, b);
                return b;
            }
            return null;
        } catch (IOException e) {
            if (e != null) {
                e.printStackTrace();
            }
            return null;
        }
    }

    @Override
    protected void onPostExecute(Bitmap param) {
        mCurrentTasks.remove(mImageKey);
        if (param != null) {
            mListAdapter.notifyDataSetChanged();
        }
    }
}
4

2 に答える 2