快速滚动时,ItemView在RecyclerView中显示错误位置的动画

时间:2015-09-12 08:56:12

标签: android adapter android-recyclerview

我正在使用recyclerView构建聊天用户界面,它允许三种消息:textMessage voiceMessage photoMessage
对于voiceMessageItem正在播放,我打算让其voiceMessageIcon(动画列表可驱动资源)开始播放动画。
但是当我快速滚动recyclerView时,voiceMessageItem会转到错误的位置。 enter image description here 适配器onBindViewHolder:

@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
       holder.getTextView(R.id.in_voice_content_iv).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (MediaPlayerUtils.isPlaying()) {
                        MediaPlayerUtils.stopPlaying();
                        playMessage(msg);
                    } else {
                        playMessage(msg);
                    }
                    ((AnimationDrawable) holder.getTextView(R.id.in_voice_content_iv).getCompoundDrawables()[0]).start();
                    SharedPreferencesUtils.put(context, "itemState", msg.getId());
                }
            }); 

}

我该如何解决?

2 个答案:

答案 0 :(得分:0)

我希望你已经解决了这个问题。但是如果没有,请尝试将其设置为适当的值(textMessage,voiceMessage或photoMessage),具体取决于onBindViewHolder中的isPlaying(),甚至在onClick函数之外。

答案 1 :(得分:0)

你不应该以某种方式使用位置参数吗? 你怎么知道如何从适配器中获取正确的项目?

使用位置但不在侦听器内 - 因为你应该使用

holder.getAdapterPosition();