2016-11-05 2 views
1

나는 Firebase를 사용하여 채팅 앱을 만듭니다. firebase-ui의 recycleViewFirebaseRecyclerAdapter을 사용하여 모든 메시지를 표시합니다. 내 문제는 누군가가 메시지 (아래에서 볼 수 있듯이) 전체 레이아웃이 깜박일 때입니다. Firebase 콘솔에서도 메시지를 변경하면 발생합니다. 내 뷰 홀더에서 내 모델에 따라 하트 이미지보기 만 업데이트합니다. 버전 0.6.2를 사용하고 있지만 1.0.0에서는 여전히 발생합니다.FirebaseRecyclerAdapter가 업데이트되면 내 행을 깜박입니다.

  • getItemViewType
  • populateViewHolder
  • onCreateViewHolder

enter image description here

: 나는 다음과 같은 방법을 재정의 한 viewTypes을 사용하고 있기 때문에 내 어댑터에 대해

, 나는 FirebaseRecyclerAdapter 확장

class ChatMessageOutViewHolder extends RecyclerView.ViewHolder { 

    @BindView(R.id.message_out_content) 
    TextView messengerView; 

    @BindView(R.id.message_out_heart) 
    ImageView heartView; 

    @BindView(R.id.message_out_heart_likes) 
    TextView likesView; 

    @BindView(R.id.message_out_time) 
    TextView timeView; 

    ChatMessageOutViewHolder(View v) { 
     super(v); 
     ButterKnife.bind(this, v); 
    } 

    void apply(final ChatMessage model) { 
     messengerView.setText(model.content); 
     likesView.setText(model.likes == null ? "" : String.valueOf(model.likes.size())); 

     Drawable image = ContextCompat.getDrawable(mContext, R.drawable.ic_fav_1); 
     if (model.likes != null && model.likes.contains(mUserId)) { 
      image = ContextCompat.getDrawable(mContext, R.drawable.ic_fav_2); 
     } 

     heartView.setImageDrawable(image); 
     SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm", Locale.getDefault()); 
     timeView.setText(simpleDateFormat.format(new Date(model.getTimeStamp()))); 

     heartView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (mListener != null) { 
        mListener.onHeartClick(model); 
       } 
      } 
     }); 
    } 
} 

답변

2

나는 알아 냈다 !! FirebaseRecyclerAdapter의 버그는 아닙니다. RecyclerView의 기본 동작처럼 들립니다. 이 문제를 해결하려면 설정 한 후 로컬 참조를 추가하십시오.

RecyclerView.ItemAnimator animator = mRecyclerView.getItemAnimator(); 
if (animator instanceof SimpleItemAnimator) { 
    ((SimpleItemAnimator) animator).setSupportsChangeAnimations(false); 
} 
관련 문제