1

リサイクルビューでは、統計情報やボタンなどのビデオを含む複数のビューが1行に含まれます。リサイクルビュー内の単一アイテム内のビューがアダプタがリフレッシュされたときにリフレッシュされないようにする

このボタンは、統計情報の値をその項目に増やし、その位置にnotifyItemChangeを使用してアダプタを更新することです。

私の問題は、その行がリフレッシュされ、統計情報が更新されている間、ビデオがリセットされ、最初からデータを再度ロードする必要があります。

私が望むのは、ユーザーが単一の行アイテムに対して感情を追加するが、ビュー(ビデオ)がリフレッシュされず、感情統計のように特定のアイテムのみが更新されるFacebookアプリケーションのようなものです。

答えて

3

あなたはViewHolder

@Override 
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position, List<Object> payloads) { 
    if(payloads == null || payloads.isEmpty()) { 
     onBindViewHolder(holder, position);//your normal method 
    } 
    else { 
     //partial refresh 
    } 
} 
+0

であなたのviewの一部をリフレッシュすることができ、

void notifyItemChanged (int position,Object payload) 

の使用を検討し、中に解析されpayloadsに基づいて

void onBindViewHolder (VH holder,int position, List<Object> payloads) 

にペイロードをキャプチャする必要があります私はnotifyItemChange(位置、 "ペイロードデータ")、無効なアイテムのアニマ私のリサイクラビューのためのtorですが、ペイロードを持つonBindViewholderメソッドはまだ呼び出されません。ペイロードなしでonBindViewHolderを呼び出すだけです。私は行方不明のものがありますか? –

+0

いつ 'notifyItemChange'を呼び出しましたか? 'setAdapter'の直後に使用したい場合は、' setAdapter'の直後に使用すると動作しません – WenChao

+0

@Karate_Dog 'setAdapter'の後に使用する場合は、' recyclerview.post() 'に呼び出しをラップすることができます – WenChao

2

ペイロードを使用する必要があります。これは、アダプターにデータセットの変更について通知するときにもペイロードを渡していることを意味し、このペイロードはアダプター内の適切なコールバックに渡され、無効化する必要があるビューを決定します。

adapter.notifyItemChanged(position, payload); // payload is an Object 

そして、あなたは、アダプタのonBindViewHolderで、このペイロードを受け取ります:

public void onBindViewHolder(HelloViewHolder holder, int position, List<Object> payload) { 
     // decide what to update based on the payload 
} 

あなたは一例としてthisを表示することができます。