ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

android-在RecyclerView中的ImageView中更改图像

2019-11-11 17:27:08  阅读:203  来源: 互联网

标签:android-recyclerview onclicklistener android


我想在RecyclerView中更改ImageView的图像.

例如 :

我在RecyclerView中有30个项目,当我单击位置1上的项目时,项目将图像从播放更改为暂停,然后当我向下滚动到位置15并单击“播放”按钮时,选择了上一个按钮(项目1 )应将图像更改回播放状态,而第15项图像应更改为暂停.我已经在onbindViewHolder内部实现了onClicklistener.但是,它更改了错误项目中的图像.
请帮我

if (mediaPlayer != null) {
    mediaPlayer.reset();
    mediaPlayer.stop();
    LinearLayout view = (LinearLayout) recyclerView.getChildAt(pos);
    ImageView button = (ImageView) view.findViewById(R.id.playbutton);
    button.setImageResource(R.drawable.ic_play_arrow_black_24dp);
}




  playbutton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                boolean isPlaying = sharedPreferences.getBoolean(ConstantValue.ISPLAYING, false);
                RecordingDetail recordingDetail = list.get(getAdapterPosition());
                if (!isPlaying) {
                    SharedPreferences.Editor editor = sharedPreferences.edit();
                    editor.putBoolean(ConstantValue.ISPLAYING, true);
                    editor.putInt(ConstantValue.CURRENTINDEX, getAdapterPosition());
                    editor.commit();
                    playbutton.setImageResource(R.drawable.ic_pause_black_24dp);
                    mediaPlayerControl.Play(recordingDetail.path, getAdapterPosition(), progressBar);
                }

这里的播放按钮是我要更改的图像视图,mediaPlayerControl是接口

解决方法:

您可以使用全局字段来跟踪所选位置,然后检查是否在onBindViewHolder中选择了当前视图.另外,我强烈建议您在ViewHolder内部分配onClickListener.

>声明一个全局变量:

private int selectedPosition = -1;

>然后在onClick中设置所选位置,然后调用notifyDatasetChanged:

@Override
public void onClick(View view) {
    selectedPosition = getAdapterPosition();    

    if (mediaPlayer != null) {
        mediaPlayer.reset();
        mediaPlayer.stop();
    }

    RecordingDetail recordingDetail = list.get(selectedPosition);            

    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putBoolean(ConstantValue.ISPLAYING, true);
    editor.putInt(ConstantValue.CURRENTINDEX, selectedPosition);
    editor.commit();

    mediaPlayerControl.Play(recordingDetail.path, selectedPosition, progressBar);

    notifyDatasetChanged();
}

>最后检查onBindViewHodler中的选定位置并设置适当的图像:

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    LinearLayout view = holder.linearLayout;
    ImageView button = (ImageView) view.findViewById(R.id.playbutton);

    if (position == selectedPosition) {
        button.setImageResource(R.drawable.ic_pause_black_24dp);
    } else {
        button.setImageResource(R.drawable.ic_play_arrow_black_24dp);
    }
}

编辑

正如@shalafi所建议的那样,您不应保留对RecyclerView适配器内特定视图的引用,因为视图已被回收(重用).

标签:android-recyclerview,onclicklistener,android
来源: https://codeday.me/bug/20191111/2021262.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有