2016-04-14 2 views
0

Picassoを使用してプラグインを作成しました。android.widget.ImageViewを使用して、キャッシュされた画像を読み込みます。 リピータを使用している場合、プラグインが正常に動作しますが、私は第七項目について、過去をスクロールした後、ListViewコントロールでそれを使用してみたときに、リストビューは、イメージソースはリストビュー古い画像を再利用する

+0

ListViewに使用するアダプタクラスのコードを提供できますか? –

+0

[プラグイン](https://github.com/triniwiz/nativescript-image-cache-it) マイコード[ます。myList(https://gist.github.com/triniwiz/204c20cc03a5f0cd2e48c062e9434b77)、 [MyControlと](https://gist.github.com/triniwiz/a0f4db3a25a5c109e070a800b672e719) –

答えて

4

理由が異なる場合でも、古い画像を再利用するために開始しますリストビューはフラグメント全体を再利用するためです何が起こるかは、あなたのイメージがクリアされない限り、イメージが再利用されて古いイメージが表示されるということです。

私は実際にピカソを自分で使用します。これは私の現在のピカソの図書館です。 下のコードを見ると、新しい.urlを設定すると、既存のイメージがクリアされます。 (私は特定の行にコメントをつけました) - この方法ではイメージが空白になり、ピカソはメモリ、ディスク、またはリモートURL(私の場合はリモートURL)から読み込み、適切なイメージを割り当てます。

"use strict"; 

var Img = require('ui/image').Image; 
var application = require("application"); 

var PT = com.squareup.picasso.Target.extend("Target",{ 
    _owner: null, 
    _url: null, 
    onBitmapLoaded: function(bitmap, from) { 
     // Since the actual image/target is cached; it is possible that the 
     // target will not match so we don't replace the image already seen 
     if (this._url !== this._owner._url) { 
      return; 
     } 
     this._owner.src = bitmap; 
    }, 
    onBitmapFailed: function(ed) { 
     console.log("Failed File", this._url); 
    }, 
    onPrepareLoad: function(ed) { 

    } 
}); 

Object.defineProperty(Img.prototype, "url", { 
    get: function() { 
     return this._url; 
    }, 
    set: function(src) { 
     if (src == null || src === "") { 
      this._url = ""; 
      this.src = null; 
      return; 
     } 
     var dest = src; 
     this._url = dest; 
     this.src = null; // -- THIS IS THE LINE TO CLEAR THE IMAGE 
     try { 
      var target = new PT(); 
      target._owner = this; 
      target._url = dest; 
      var x = com.squareup.picasso.Picasso.with(application.android.context).load(dest).into(target); 
     } catch (e) { 
      console.log("Exception",e); 
     } 
    }, 
    enumerable: true, 
    configurable: true 
}); 

あなたは一度だけ、このクラスを要求する必要がありますのでご注意ください、それは<画像>部品に付着して、新しいする.urlプロパティを追加します。これは私がこれを宣言的なXMLで他の画面のすべてで使用できるようにし、ピカソが必要なときにはピラーがそのイメージの読み込みを引き継ぐために.urlプロパティを使うだけです。

+0

ありがとう、しかし私は 'onImageSourcePropertyChanged(data:PropertyChangeData){ を使用しました。var image = data.object; if(!image.android){ return; } image._setNativeImage(data.newValue?data.newValue.android:null); } ' –

+0

私はあなたがここで言うことに従っていない。あなたはイメージを適切にクリアするために上記を使う方法を理解したと言っていますか?あるいは、コードがまったく違うのですか? – Nathanael

+0

私は別の方法で自分の問題を解決しようとした –

関連する問題