2016-04-19 8 views
0

Picassoキャッシュに問題があります(私はそうだと思います)。私はRecyclerViewとRecyclerView.Adapterを作成しました。リストの1つの項目にはImageViewが含まれています。私はnotifyItemChangedメソッドを呼び出す項目を更新するとRecyclerview、otifyItemChanged()および画像Picassoによってロードされました

public void onBindViewHolder(PageViewHolder holder, int position) { 
    final int positionAdp = holder.getAdapterPosition(); 

    (new Picasso.Builder(mContext).addRequestHandler(new PageThumbRequestHandler(mPagesContainer.get())) 
      .build()) 
      .load(PageThumbRequestHandler.REQUEST_SCHEME + "://" + mPages.get(positionAdp).mTag) 
      .memoryPolicy(MemoryPolicy.NO_CACHE, MemoryPolicy.NO_STORE) 
      .networkPolicy(NetworkPolicy.NO_CACHE) 
      .into(holder.mThumbView); 

    holder.mThumbView.setTag(mPages.get(positionAdp).mTag); 
    holder.mThumbView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      String tag = (String) v.getTag(); 
      mPageListener.onPageSelected(tag); 
     } 
    }); 
    holder.mLp.setText(Integer.toString(mPages.get(positionAdp).mLp)); 
} 

:このImageViewのに私はこのようなピカソのライブラリを使用してイメージをロードします。画面上では、更新されたアイテムがフリックしているので、アイテムは正しく無効化されています。しかし、新しい親指は表示されません - 私は常にImageViewにビットマップを最初に読み込まれます。

答えて

0

あなたは通り、このためholder.getAdapterPosition()を使用しないでくださいRecyclerView JavaDoc states

[...]あなたはこの方法内の関連するデータ項目を取得しながらのみ位置パラメータを使用する必要がありますし、維持するべきではありませんそれのコピー。アイテムの位置が必要な場合は、更新されたアダプタ位置を持つgetAdapterPosition()を使用してください(例えばクリックリスナーの場合)をオンにする必要がある場合。

あなたはそのようなユーザーとの対話などの未知の要因によって非同期で実行すると確信していない限り、getAdapterPosition()を使用していない(すなわち。クリックまたはタッチリスナー内)。

View Holderの最初の読み込みでは、onBindViewHolder(ViewHolder holder, int position)メソッドのposition引数を使用して、リサイクラのアダプタ内のデータの位置にします。

関連する問題