如何刷新recyclerview的上一个项目行视图的视图

2024-01-17

大家好,希望你们一切都好。 我正在开发一个 Android 应用程序,它将播放不同的动物声音。

我正在使用回收视图,如下面的屏幕截图所示。现在我面临一个问题,我的行中有一个播放按钮,每当我从项目 0 或在视图内显示暂停选项的任何位置播放声音时,该按钮都会播放动物的声音。但每当我单击下一个项目 1 或任何其他项目时,它都不会更改上一个项目 0 的图像。

我通过使用以下代码刷新我的适配器列表来完成此操作。! 但我认为这不是一个好的做法。!

                t1.recyclerView.setAdapter(null);
                t1.customAdapter=new CustomAdapter(t1.animalList,ctx);
                t1.recyclerView.setAdapter(t1.customAdapter);

我尝试使用每一样东西notifyItemChanged(oldPosition)但还是没有得到我想要的结果!

请建议我一个合适的方法来解决这个问题?我是 Android 新手,我有一个想法要获取最后一项的视图并先保存它,然后我获取该视图并在上一个列表按钮上设置默认图像播放,但我不知道该怎么做?

这是我的自定义适配器代码。!

public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.MyViewHolder> {
    private List<Animal> AnimalList;
    public Context ctx;
    public static int postionchange=-1;

    public static Tab1Birds t1;


    final int[] countLike = {0};
    //public static MediaPlayer mediaPlayer2 = new MediaPlayer();
    int pos=0;
    public class MyViewHolder extends RecyclerView.ViewHolder {
            public ImageView display;
            public TextView nameTextView;
            public ImageButton play,options,menubtn;
            public MyViewHolder(View view) {
                super(view);
                nameTextView = (TextView) view.findViewById(R.id.nameTextView);
                play=(ImageButton)view.findViewById(R.id.playbtn);
                options=(ImageButton)view.findViewById(R.id.menubtn);
                display=(ImageView)view.findViewById(R.id.imageview);
                menubtn = (ImageButton) view.findViewById(R.id.menubtn);
                    //MediaPlayerClass.mediaPlayer= new MediaPlayer();
            }
    }
    public CustomAdapter(List<Animal> moviesList,Context ct) {
        this.AnimalList = moviesList;
        this.ctx=ct;
        }
    @Override
        public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View itemView = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.row_list, parent, false);
        return new MyViewHolder(itemView);
        }
    @Override
        public void onBindViewHolder(final MyViewHolder holder, final int position) {
        final Animal animal = AnimalList.get(position);

        final int[] previous = {position};
            holder.nameTextView.setText(animal.getName());
            holder.display.setImageResource(animal.getImageResource());
        //////////////////////////////////////////////////////////////////////////////////////////////////////////
        holder.options.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                try {
                    if (MediaPlayerClass.mediaPlayer.isPlaying()) {
                        holder.play.setBackgroundResource(R.drawable.play_btn);
                        MediaPlayerClass.mediaPlayer.stop();
                    }
                } catch (Exception ex) {
                }
                Dialog dialog;
                final String[] items = {"SET AS RING TUNE", "SET AS MESSAGE TUNE", "SET AS ALARM TUNE"};
                final ArrayList itemsSelected = new ArrayList();
                final AlertDialog.Builder builder = new AlertDialog.Builder(ctx);
                builder.setTitle("OPTIONS");
                builder.setMultiChoiceItems(items, null,
                        new DialogInterface.OnMultiChoiceClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int selectedItemId,
                                                boolean isSelected) {
                                if (isSelected) {
                                    itemsSelected.add(selectedItemId);
                                } else if (itemsSelected.contains(selectedItemId)) {
                                    itemsSelected.remove(Integer.valueOf(selectedItemId));
                                }
                            }
                        })
                        .setPositiveButton("Done!", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int id) {
                                Toast toast = Toast.makeText(ctx, "successfully selected", Toast.LENGTH_SHORT);
                                    toast.show();
                                SparseBooleanArray CheCked = ((AlertDialog) dialog).getListView().getCheckedItemPositions();
                                String str = "";
                                if (CheCked.get(0)) {

                                    savering(animal.getSoundResource());
                                }
                                if (CheCked.get(1)) {
                                    savemsg(animal.getSoundResource());
                                }
                                if (CheCked.get(2)) {
                                    savealarm(animal.getSoundResource());
                                }
                               // if (CheCked.get(3)) {
                                   // DatabaseHelper.save_bookmarks(itemsList.get(position).getitemName(), R.drawable.play_btn, itemsList.get(position).getItemTuneSt());
                                   // Toast.makeText(ctx, "Item added to favourites", Toast.LENGTH_SHORT).show();

                               // }
                            }
                        })
                 .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int id) {
                    }
                });
                dialog = builder.create();
                dialog.show();
                ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            }
        });
        pos=position;

        // for animation
        // ///////////////////////////
        //animate(holder);//Function for animation
        //////////////////////////////

        holder.play.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                if(postionchange==-1)
                {
                    postionchange=position;
                }
                if(postionchange!=position)
                {
                    holder.play.setBackgroundResource(R.drawable.play_btn);
                }
                holder.play.setBackgroundResource(R.drawable.pause_btn);// present state
                MediaPlayerClass.play(animal.getSoundResource(),ctx);
                if(countLike[0] ==0)
                    {
                        countLike[0] =1;
                    }else  if(countLike[0] ==1)
                    {
                        //if is playing then Pause
                        if(MediaPlayerClass.mediaPlayer.isPlaying())
                            MediaPlayerClass.mediaPlayer.stop();

                        t1.recyclerView.setAdapter(null);
                        t1.customAdapter=new CustomAdapter(t1.animalList,ctx);
                        t1.recyclerView.setAdapter(t1.customAdapter);


                        holder.play.setBackgroundResource(R.drawable.play_btn); //sound stop show play button
                        countLike[0] =2;
                    }
                    if(countLike[0] >1)
                    {
                        countLike[0] =0;
                        holder.play.setBackgroundResource(R.drawable.play_btn); // click to play music, click again to stop music

                    }
                    //setOnCompletionListener
                MediaPlayerClass.mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                    @Override
                    public void onCompletion(MediaPlayer mediaPlayer) {
                        holder.play.setBackgroundResource(R.drawable.play_btn);
                    }
                });
                // MediaPlayerClass.mediaPlayer.start();

                }
        });
    }
        @Override
        public int getItemCount() {
            return AnimalList.size();
        }
    //animation
    public void animate(RecyclerView.ViewHolder viewHolder) {
        final Animation animAnticipateOvershoot = AnimationUtils.loadAnimation(ctx, R.anim.bounce_interpolator);
        viewHolder.itemView.setAnimation(animAnticipateOvershoot);
    }

    //////////////////////////////////////////////////////////////////////////////////////////

}

这是一个例子三星手机中的音乐播放器.! 当我播放音乐时,它会显示动画,当我播放下一首歌曲时,它会播放该歌曲并停止上一首播放的音乐及其动画。! 我知道如何停止媒体播放器,但如何改变停止它动画片或音乐库等?


下面的示例适用于 RecyclerView 的普通列表数据。

  1. 首先我们需要保存点击的位置,然后我们必须应用notifyDataSetChanged()。
  2. 之后,当刷新列表时,检查您保存的位置与实际绑定位置,然后应用您需要的更改。

    public void onBindViewHolder(最终MyViewHolder持有者,最终int位置){

        holder.tvGroupName.setText(list.get(position).getGroupName());
    
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
    
    
                // Save position in item click then refresh list
                pos = position;
                notifyDataSetChanged();
    
            }
        });
    
        // Once all items started refreshing check your save position with actual position then change text
        if (pos == position) {
            holder.tvGroupName.setText("Testing");
        }
    
    }
    

希望这个示例有帮助..

And,

我还修改了你的课程,检查一下,希望它能起作用。

public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.MyViewHolder> {
    private List<Animal> AnimalList;
    public Context ctx;
    public static int postionchange=-1;

    public static Tab1Birds t1;


    final int[] countLike = {0};
    //public static MediaPlayer mediaPlayer2 = new MediaPlayer();
    int pos;
    public class MyViewHolder extends RecyclerView.ViewHolder {
        public ImageView display;
        public TextView nameTextView;
        public ImageButton play,options,menubtn;
        public MyViewHolder(View view) {
            super(view);
            nameTextView = (TextView) view.findViewById(R.id.nameTextView);
            play=(ImageButton)view.findViewById(R.id.playbtn);
            options=(ImageButton)view.findViewById(R.id.menubtn);
            display=(ImageView)view.findViewById(R.id.imageview);
            menubtn = (ImageButton) view.findViewById(R.id.menubtn);
            //MediaPlayerClass.mediaPlayer= new MediaPlayer();
        }
    }
    public CustomAdapter(List<Animal> moviesList,Context ct) {
        this.AnimalList = moviesList;
        this.ctx=ct;
    }
    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.row_list, parent, false);
        return new MyViewHolder(itemView);
    }
    @Override
    public void onBindViewHolder(final MyViewHolder holder, final int position) {
        final Animal animal = AnimalList.get(position);

        final int[] previous = {position};
        holder.nameTextView.setText(animal.getName());
        holder.display.setImageResource(animal.getImageResource());
        //////////////////////////////////////////////////////////////////////////////////////////////////////////
        holder.options.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                try {
                    if (MediaPlayerClass.mediaPlayer.isPlaying()) {
                        holder.play.setBackgroundResource(R.drawable.play_btn);
                        MediaPlayerClass.mediaPlayer.stop();
                    }
                } catch (Exception ex) {
                }
                Dialog dialog;
                final String[] items = {"SET AS RING TUNE", "SET AS MESSAGE TUNE", "SET AS ALARM TUNE"};
                final ArrayList itemsSelected = new ArrayList();
                final AlertDialog.Builder builder = new AlertDialog.Builder(ctx);
                builder.setTitle("OPTIONS");
                builder.setMultiChoiceItems(items, null,
                        new DialogInterface.OnMultiChoiceClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int selectedItemId,
                                                boolean isSelected) {
                                if (isSelected) {
                                    itemsSelected.add(selectedItemId);
                                } else if (itemsSelected.contains(selectedItemId)) {
                                    itemsSelected.remove(Integer.valueOf(selectedItemId));
                                }
                            }
                        })
                        .setPositiveButton("Done!", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int id) {
                                Toast toast = Toast.makeText(ctx, "successfully selected", Toast.LENGTH_SHORT);
                                toast.show();
                                SparseBooleanArray CheCked = ((AlertDialog) dialog).getListView().getCheckedItemPositions();
                                String str = "";
                                if (CheCked.get(0)) {

                                    savering(animal.getSoundResource());
                                }
                                if (CheCked.get(1)) {
                                    savemsg(animal.getSoundResource());
                                }
                                if (CheCked.get(2)) {
                                    savealarm(animal.getSoundResource());
                                }
                                // if (CheCked.get(3)) {
                                // DatabaseHelper.save_bookmarks(itemsList.get(position).getitemName(), R.drawable.play_btn, itemsList.get(position).getItemTuneSt());
                                // Toast.makeText(ctx, "Item added to favourites", Toast.LENGTH_SHORT).show();

                                // }
                            }
                        })
                        .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int id) {
                            }
                        });
                dialog = builder.create();
                dialog.show();
                ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            }
        });


        // for animation
        // ///////////////////////////
        //animate(holder);//Function for animation
        //////////////////////////////

        holder.play.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                pos=position;
                notifyDataSetChanged();                    

            }
        });

        if (pos == position){

            holder.play.setBackgroundResource(R.drawable.pause_btn);// present state
            MediaPlayerClass.play(animal.getSoundResource(),ctx);
            if(countLike[0] ==0)
            {
                countLike[0] =1;
            }else  if(countLike[0] ==1)
            {
                //if is playing then Pause
                if(MediaPlayerClass.mediaPlayer.isPlaying())
                    MediaPlayerClass.mediaPlayer.stop();

                t1.recyclerView.setAdapter(null);
                t1.customAdapter=new CustomAdapter(t1.animalList,ctx);
                t1.recyclerView.setAdapter(t1.customAdapter);


                holder.play.setBackgroundResource(R.drawable.play_btn); //sound stop show play button
                countLike[0] =2;
            }
            if(countLike[0] >1)
            {
                countLike[0] =0;
                holder.play.setBackgroundResource(R.drawable.play_btn); // click to play music, click again to stop music

            }
            //setOnCompletionListener
            MediaPlayerClass.mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                @Override
                public void onCompletion(MediaPlayer mediaPlayer) {
                    holder.play.setBackgroundResource(R.drawable.play_btn);
                }
            });
            // MediaPlayerClass.mediaPlayer.start();
        }else {
            holder.play.setBackgroundResource(R.drawable.play_btn);
        }
    }
    @Override
    public int getItemCount() {
        return AnimalList.size();
    }
    //animation
    public void animate(RecyclerView.ViewHolder viewHolder) {
        final Animation animAnticipateOvershoot = AnimationUtils.loadAnimation(ctx, R.anim.bounce_interpolator);
        viewHolder.itemView.setAnimation(animAnticipateOvershoot);
    }

}

@Rajesh

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何刷新recyclerview的上一个项目行视图的视图 的相关文章

随机推荐

  • Android - 是否有可能制作无限画布?

    目前我正在开发允许用户绘图的应用程序 简单的想 只需扩展 Canvas 类 大部分事情就完成了 这是我最初的想法和想法 但由于画布相当小 因为这只是用户在屏幕上看到的内容 因此没有太多可以绘制的空间 浏览我发现的文档translate 允许
  • 粘性页脚 CSS

    我有一个非常基本的网站 页眉 内容 页脚没有侧边栏或任何东西 问题是内容区域与页脚重叠 我已经尝试了所有粘性页脚修复 即 csstricks ryanfait com 和我在 google 上找到的其他一些以及这里的一些 但它们都不起作用
  • 通过应用程序在 Google Play 商店中的屏幕截图质量 - 变得压缩、模糊和损坏

    通过 Google Play 应用程序查看应用程序的屏幕截图时 显示的屏幕截图经过压缩且质量较低 当通过桌面网络浏览器查看 Play 应用商店页面时 它们是完整质量的 我尝试了几个建议 包括 尝试 JPEG 和 PNG 使用较低尺寸和较高尺
  • 如何从现有 Kubernetes 清单构建 Helm 图表

    我是 k8s 的新手 我有作业 这就是我的情况 有一个面向微服务的应用程序 使用十个容器构建 它有一个docker compose文件以方便设置 现在我的任务是将其部署到 Kubernetes 中 我的想法 转换docker compose
  • 是否可以在 Virtualenv 沙箱上添加 PyQt4/PySide 包?

    我在用着虚拟环境 http pypi python org pypi virtualenv在我的开发环境中获利web py simplejson和其他面向网络的包 我将使用 Qt 开发一个简单的 python 客户端 以重用一些使用 web
  • 两个不同的“字符串”是同一个对象实例?

    该代码非常不言自明 我预计当我做的时候a1 and b1我正在创建两个包含相同文本的不同字符串实例 所以我想a1 b1是真的但是object ReferenceEquals a1 b1 是假的 但事实并非如此 为什么 make two se
  • ORM,DataBinding 到 DataGridView:插入/删除未保存到数据库的新行

    我对 ORM 还很陌生 目前我正在尝试 Telerik OpenAccess ORM 但问题实际上可能并不特定于该 ORM 而且我还没有完全确定该 ORM 我想要实现的是绑定 DataGridView 以显示 Customers 对象的集合
  • C++:创建映射到枚举的某种类型的对象

    考虑以下代码示例 class Base class A class B class C A B and C are inherited from Base enum TypeID TYPE A 0 TYPE B TYPE C TYPE MA
  • 如何从两列中获取双向组合的计数?

    我在一家货运公司工作 我们有兴趣统计我们的一辆卡车在两个城市之间双向行驶的次数 我有一个表格 列出了每个行程段的出发地和目的地 例如 Origin Destination City 1 City 2 City 2 City 1 City 3
  • 二叉搜索树到 inOrder 数组

    很简单的问题 如何递归地创建使用此构造函数的二叉搜索树数组 按顺序 public class OrderedSet
  • 使用Python(ubuntu)检测工作站/系统屏幕锁定

    无论如何 我们是否可以检测系统 屏幕何时被锁定并通知在 Ubuntu 中触发某些事件 当屏幕通过 DBus 锁定 解锁时 可能会收到通知 这是参考侏儒屏幕保护程序 http live gnome org GnomeScreensaver F
  • git pull fatal:内存不足,malloc 失败

    我有一个回购协议https bitbucket org https bitbucket org 几天前 由于错误 大量图像文件被推送到存储库中 然后文件通过另一次推送被删除 之后该存储库工作正常 但今天当我尝试从存储库中提取时 git pu
  • Express 和 Firebase - 无法在重定向前设置标头

    我正在尝试使 Firebase 身份验证在服务器上工作 use strict const functions require firebase functions const admin require firebase admin adm
  • gfortran 无法在 Mac OS X 10.9 (Mavericks) 上运行

    最近 我将 OS X 更新到了 10 9 Mavericks 不幸的是 尽管我将 OS X Mavericks 的 Xcode 命令行更新为 5 1 1 但 gfortran 停止工作 类似的问题前段时间有人问过 here https st
  • 向首次访客显示欢迎信息

    寻找一种简单的方法来向我的网站的首次访问者显示欢迎消息 最好的方法是什么 使用cookie if empty COOKIE first time show welcome message setcookie first time 1 tim
  • 通过 ssh 启动包含 nohup 的远程脚本

    我想通过 ssh 远程启动一个脚本 如下所示 ssh email protected cdn cgi l email protection t cd my dir myscript data email protected cdn cgi
  • 如何在 Zend Framework 2 中配置学说扩展?

    我已将此行添加到我的composer json中 gedmo doctrine extensions dev master 这是在我的模块的 module config php 中 doctrine gt array driver gt a
  • 将从文件读取的值作为输入传递给 Oracle 中的 SQL 查询

    cat file txt 12354 13456 13498 bin bash for i in cat file txt do sqlplus XXXXX XXXXX DB NAME lt lt EOF select from TABLE
  • Cognos 8 查询查找所有报表和列名称

    我想查询 Cognos 8 中的元数据以查找所有报告和列名称 如果可能的话 我想包含列定义 我可以使用 Cognos 报告来执行此操作还是需要查询某个存储库 Thanks 您可以使用以下查询从内容存储中选择报告列表 SELECT CMOBJ
  • 如何刷新recyclerview的上一个项目行视图的视图

    大家好 希望你们一切都好 我正在开发一个 Android 应用程序 它将播放不同的动物声音 我正在使用回收视图 如下面的屏幕截图所示 现在我面临一个问题 我的行中有一个播放按钮 每当我从项目 0 或在视图内显示暂停选项的任何位置播放声音时