1

私はUILを使用して、ListFragmentに画像を読み込んで表示しています。ListViewでは、Handler-Patternを使用しています。今のところ問題ありません。

しかし、ListEntryをクリックして2番目のフラグメント内に別の画像を表示すると、失敗します。

奇妙なことに、2番目のフラグメントのボタンをクリックすると、その画像が読み込まれ、チャームのように機能します。

ログ出力は、どちらの場合も、画像がディスクキャッシュにあり、同様にスケーリングされたことを示しています。-エラーはありません。

この関数はフラグメントの一部です:(そして常にスレッド1(UI)から呼び出されます)

    public void updateStockInfo(final String symbol) {

    if (viewer != null) {
        //final ImageView imageview = (ImageView) viewer.findViewById(R.id.stockinfo);

        urlForStockInfo = "http://chart.finance.yahoo.com/c/3m/d/" + symbol.toLowerCase();

        imageloader.loadImage(getActivity(), urlForStockInfo, new ImageLoadingListener() {
            ...

            @Override
            public void onLoadingComplete(final Bitmap loadedImage) {
                imageview.setImageBitmap(loadedImage);
                logger.debug("Loadinf complete");
            }
        });
    }

onActivityCreated(onCreateViewと同じ)からupdateStockInfoを呼び出すと、例外なく失敗します。画像をロードするためのスレッドが開始されません。LoadAndDisplayImageTas:run()の89行目にThread.interrupted()のチェックがあります-このチェックは失敗します。

手動で(ボタンを押す)Buuuuutttが機能する場合は、updateStockInfoを呼び出しますか?

すべての場合において、updateStockInfoはUIスレッドによって呼び出されます。

ヒントはありますか?事前にt​​hx!

[更新]
ソースをダウンロードし、92行目のThread.interupted()のチェックを削除しました

        if (/* Thread.interrupted() || */checkTaskIsNotActual()) return;
    if (configuration.loggingEnabled) Log.i(ImageLoader.TAG, String.format(LOG_DISPLAY_IMAGE_IN_IMAGEVIEW, imageLoadingInfo.memoryCacheKey));

あなたは何を知っていますか-それは機能します。これはバグでしたか、それとも私の特別な場合にのみ機能しますか?

4

1 に答える 1

2

ImageLoader.stop()活動のどこかに電話をかける可能性が高くなります。

于 2012-10-14T16:32:40.270 に答える