notifyDataSetChanged 不会刷新 RecyclerView

2024-01-17

我有一个奇怪的问题。我切换到RecyclerView from ListView我无法刷新或通知我的更改ListView。我尝试打电话Item.this.notifyDataSetChanged();以及其他刷新方法View但它不起作用。 反而RecyclerView当我滚动时刷新(无论方向如何)。我怎样才能通知我的RecyclerView什么时候有变化?

CODE:

@Override
public void onBindViewHolder(Ids holder, final int position) {
    rowItemClass = (ListViewRow) rowItems.get(position);
    Log.e("swag", "OYOYOYOYOYO");
    if (Globals.isPlaying && Globals.pos == position) {

        if (pausedSamePos == true) {
            holder.pauseed_play.setVisibility(View.VISIBLE);
            holder.playing_pause.setVisibility(View.GONE);
        } else {
            holder.pauseed_play.setVisibility(View.GONE);
            holder.playing_pause.setVisibility(View.VISIBLE);
        }
        holder.song_currenttime_sb.setActive();
        holder.song_duration.setVisibility(View.INVISIBLE);
        holder.song_duration_sb.setVisibility(View.VISIBLE);
        holder.seekbar.setActive();

    } else {
        holder.seekbar.setInactive();
        holder.song_currenttime_sb.setInactive();
        holder.song_icon.setImageResource(rowItemClass.getImageId());
        holder.song_duration_sb.setVisibility(View.INVISIBLE);
        holder.song_duration.setVisibility(View.VISIBLE);
        holder.pauseed_play.setVisibility(View.GONE);
        holder.playing_pause.setVisibility(View.GONE);

    }
    sharedPreference = new SharedPreference();

    holder.song_duration.setTypeface(Globals
            .getTypefaceSecondary(context));
    holder.song_duration_sb.setTypeface(Globals
            .getTypefaceSecondary(context));
    holder.song_name.setTypeface(Globals.getTypefacePrimary(context));
    holder.song_currenttime_sb.setTypeface(Globals
            .getTypefaceSecondary(context));

    holder.song_name.setText(rowItemClass.getTitle());
    holder.song_duration.setText(rowItemClass.getDesc());

    holder.song_duration_sb.setText(rowItemClass.getDesc());
    holder.favorite.setTag(position);
    holder.song_currenttime_sb.setTag(position);
    holder.seekbar.setTag(position);
    holder.clickRegister.setTag(position);
    holder.song_icon.setTag(position);
    holder.song_name.setTag(position);
    holder.song_duration.setTag(position);
    holder.song_duration_sb.setTag(position);
    holder.more_options.setTag(position);
    // int task_id = (Integer) holder.seekbar.getTag();
    final Ids finalHolder = holder;





    holder.clickRegister.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            try {

                if ((Globals.isPlaying.booleanValue())
                        && (Globals.pos == position)) {
                    pausePlaying();

                } else {

                    Globals.stopPlaying();
                    pausedSamePos = false;
                    Globals.pos = position;
                    Globals.isPlaying = true;
                    Item.this.notifyDataSetChanged();

                    Globals.mp = MediaPlayer.create(context, Integer
                            .valueOf(Item.this.songPos[position])
                            .intValue());
                    Globals.mp.start();
                    Globals.pos = position;

                    Globals.isPlaying = Boolean.valueOf(true);
                    Item.this.notifyDataSetChanged();

                    Globals.mp
                            .setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                                @Override
                                public void onCompletion(
                                        MediaPlayer mpOnComplete) {
                                    mpOnComplete.release();

                                    Globals.isPlaying = false;
                                    pausedSamePos = false;
                                    Globals.isPlaying = Boolean
                                            .valueOf(false);
                                    finalHolder.menu_options
                                            .startAnimation(new ViewExpandAnimation(
                                                    finalHolder.menu_options));
                                    Item.this.notifyDataSetChanged();
                                }
                            });

                }
            } catch (Exception localException) {
            }

        }
    });

    holder.clickRegister
            .setOnLongClickListener(new View.OnLongClickListener() {

                @Override
                public boolean onLongClick(View v) {
                    Globals.stopPlaying();
                    Item.this.notifyDataSetChanged();
                    return true;
                }
            });




}

我一直在努力解决类似的问题,试图处理一个用例,其中所有适配器的内容都必须被替换,并且回收器视图应该白手起家: 打电话notifyDataSetChanged(), swapAdapter()对视图/布局管理器失效请求的后续调用的大量组合只会导致(看似)空的回收器视图。该视图甚至没有尝试重新绑定视图持有者。

似乎解决了这个问题的是这个 hack-ish 修复:

view.swapAdapter(sameAdapter, true);
view.scrollBy(0, 0);

事实证明,scrollBy(即使偏移量为 0)会驱动回收器视图布置其视图并执行待处理的视图持有者重新绑定。

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

notifyDataSetChanged 不会刷新 RecyclerView 的相关文章

随机推荐

  • Intellij 浏览多个 Maven 项目

    所以我有一个如下所示的文件结构 git project classpath app1 pom xml classpath project src app2 pom xml classpath project src app3 pom xml
  • 在 Spring MVC 中以编程方式设置资源路径

    我的 MVC 应用程序需要访问 servlet 上下文之外的缩略图和视频文件 所以我将 servlet context xml 设置为具有以下内容
  • 无法使用 kubectl 创建文件

    我最近开始从事微服务工作 我正在构建我的 docker 映像并希望将其部署在 kubernetes 上 创建 pod yaml 文件时 我开始收到以下错误 命令 kubectl create f podservice yaml Error
  • 跨区域调用 AWS lambda

    我有三个 lambda 函数 boss worker1 worker2 当使用 boto3 client invoke 时 我可以从老板那里调用worker1 这两个是在同一个地区的 worker2 位于单独的区域 当尝试从 boss 调用
  • 清除任务中的所有活动?

    我有一个启动屏幕活动 然后是一个登录活动 我的历史堆栈如下所示 SplashActivity LoginActivity 当用户通过 LoginActivity 成功登录时 我想启动 WelcomeActivity 但清除整个堆栈 Spla
  • 如何避免页面对象中的复合类名称错误?

    当我尝试使用有空格的类名时class country name 在页面对象中 我得到 Compound class names not permitted Selenium WebDriver Error UnknownError 如何使用
  • React Router 传递参数。如何?

    具有以下 React Router const AppRoutes
  • Autofac 已下载,我可以访问构建器方法,但不能访问 RegisterControllers 方法

    下面的代码是我到目前为止所拥有的 RegisterControllers 方法不存在 尽管我可以在 autofac 文档以及其他堆栈溢出问题上看到它 Visual Studio 一直说 ContainerBuilder 不包含 Regist
  • 使用 TypeFamilies 派生实例

    我有一个类型类Foo具有关联类型 LANGUAGE TypeFamilies class Foo a where type Bar a foo a gt Bar a 现在我想定义一个包含关联类型之一的数据类型 并派生一个Show它的实例 d
  • HTML与大虾

    我尝试使用 prawn 生成日志条目的 PDF 然后条目存储在 bbcode b bold b 等 中并转换为 html 显示 大虾有什么办法可以显示html吗 这听起来像虾格式 http github com sandal prawn f
  • WordPress 页面重定向到主页

    我有一个 WordPress 网站http www wjewel com http www wjewel com 网站的所有页面都被重定向到主页 没有用于重定向的 htaccess 文件或 web config 文件 有人可以指导我这个问题
  • 如何重复更新android TextView来模拟动画

    我希望一旦按下菜单中的按钮 TextView 中的文本就会不断变化 这是我的菜单的 onOptionsItemSelected public boolean onOptionsItemSelected MenuItem item switc
  • pip3安装pyautogui,错误代码1

    我无法安装 pyautogui 我已经尝试了一切 例如 pip3 install pillow 也按照网站上的步骤操作pyautogui 网站 http pyautogui readthedocs io en latest install
  • 配置 Redis 以与 AppHarbor 良好配合

    我使用 AppHarbor 作为 CI 环境来验证我的提交 我在 AppHarbor 中收到错误 因为 Redis 无法写入磁盘 Error RedisResponseException MISCONF Redis is configure
  • Adobe AIR 键盘挂钩

    我正在尝试向我的 AIR 应用程序添加一项功能 即使应用程序最小化 该功能也可以侦听 可配置的 全局键盘事件 例如 CTRL ALT SHIFT F12 抓取屏幕截图 我找不到任何方法来注册键盘挂钩 并且监听键盘事件仅在应用程序具有焦点时捕
  • 如何防止 iframe 页面被插入 IE 浏览历史记录中

    我在将 iframe 页面插入 IE9 的浏览历史记录时遇到很多麻烦 这很痛苦 因为您必须多次单击后退才能到达上一页 这是什么原因呢 是浏览器的bug还是页面的bug 编辑 我意识到我正在使用 javascript 来更新页面上所有 ifr
  • C++ Map 使用非默认构造函数初始化对象

    在 C 中 假设我有一个无序映射定义如下 unordered map
  • Process.Start() 明显慢于在控制台中执行

    我使用以下命令执行 exe 时遇到性能问题Process Start NET 的执行时间大约是控制台的 5 倍 什么会导致这种情况 这是一个测试程序 public static void Main string argv for int i
  • 如何将事件对象传递给命名函数

    我有一个用于单击事件的事件处理程序 事件处理程序是一个命名函数而不是匿名函数 如何将事件对象传递给这个命名函数 usual example sel click function ev do stuff which involves the
  • notifyDataSetChanged 不会刷新 RecyclerView

    我有一个奇怪的问题 我切换到RecyclerView from ListView我无法刷新或通知我的更改ListView 我尝试打电话Item this notifyDataSetChanged 以及其他刷新方法View但它不起作用 反而R