我正在使用recyclerView构建聊天用户界面,它允许三种消息:textMessage
voiceMessage
photoMessage
。
对于voiceMessageItem
正在播放,我打算让其voiceMessageIcon
(动画列表可驱动资源)开始播放动画。
但是当我快速滚动recyclerView时,voiceMessageItem
会转到错误的位置。
适配器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());
}
});
}
我该如何解决?
答案 0 :(得分:0)
我希望你已经解决了这个问题。但是如果没有,请尝试将其设置为适当的值(textMessage,voiceMessage或photoMessage),具体取决于onBindViewHolder中的isPlaying(),甚至在onClick函数之外。
答案 1 :(得分:0)
你不应该以某种方式使用位置参数吗? 你怎么知道如何从适配器中获取正确的项目?
使用位置但不在侦听器内 - 因为你应该使用
holder.getAdapterPosition();