1

단일 행에 통계, 버튼과 같은 비디오를 포함한 여러보기가 포함 된 Recycler보기가 있습니다.Recycler보기의 단일 항목 내부에서보기가 어댑터가 새로 고쳐질 때 새로 고침을 방지합니다.

이 버튼은 해당 통계의 값을 해당 항목으로 증가시키고 해당 위치에 대해 notifyItemChange를 사용하여 어댑터를 업데이트합니다.

내 문제는 행이 새로 고쳐지고 통계가 업데이트되는 동안 동영상이 재설정되며 처음부터 데이터를 다시로드해야합니다.

내가 원하는 것은 사용자가 감정을 단일 행 항목에 추가하지만보기 (비디오)가 새로 고치지 않고 감정 통계처럼 특정 항목 만 새로 고쳐집니다.

답변

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 (position, "payload data"), disabled anima를 사용했다. 토리는 내 리사이클 러 뷰에 사용하지만 페이로드가있는 onBindViewholder 메서드는 여전히 호출되지 않고 payload없이 onBindViewHolder 만 호출했습니다. 내가 빠진 것이 있습니까? –

+0

언제'notifyItemChange'를 호출 했습니까? '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을 볼 수 있습니다.