Description: 我在Android应用程序中遇到了一个问题.我有List个文本文档标题. 点击list中的一个item打开RecyclerView中的文本文档—文档被加载到TextView中. 然后,用户可以向左滑动TextView以加载下一个item(下一个文本文档),或者向右滑动TextView以查看List中的上一个item(上一个文本文档). NOTE: I have not implemented the swipe logic in code at this point in my app development.我发现,RecyclerView添加了空格/行号,如下所示,使用了List和15个项目:

  • 如果我点击list中的第一个项目,文本文档打开时,在RecyclerView顶部没有任何额外的空白—这是我想要的—但是项目的结尾有14个断点—文本文档中没有额外的空白
  • 如果我点击列表中间的一个item,比如第8项,文本文档上方会有7个行号,最后会增加7个额外的行号
  • 如果我点击列表中的最后item个,则文档顶部添加了大约14个行号,但文本末尾没有添加额外的行号
  • 使用15 item List's执行测试但是如果我使用single item(单个文本文档)创建一个新的List,该文档将完美打开,并且文件文本上方或下方没有任何额外的空间
  • 对于我的第list页(共15页)items,点击前item页,顶部没有任何空白,底部则全部空白.对于我的list/15 items,点击list中的最后item,所有的空白都在顶部,而底部没有空白,文本结束,滚动相应地停止.

一百零二 当我向下滚动列表时,onBindViewHolder()方法被多次调用,如果我rem出"清除"代码:

//holder.bind("");

附加的行号似乎被添加到项目中. 同样在向上滚动时,额外的行中断持续存在,并且现在出现具有增加的空白量的相同文本文档item的多个迭代. 因此,如果没有holder.bind("");代码,RecyclerView会在我上下滚动页面时动态添加文本文档的迭代.

I've tried the following approaches to address the issue, but none have worked:

  • 确保onBindViewHolder()内部的逻辑是高效的, 不会执行不必要的操作.

  • 已验证我的ViewHolder个实现是否正确地包含了视图 用新数据更新他们的内容

  • 判断数据一致性,并正确通知适配器 改变使用notifyDataSetChanged().

  • onBindViewHolder中移动了我的条件逻辑,所以我重置了TextView for every 项`

  • 我有cleaned projectrebuilt project,但对问题没有影响

以下是我的onBindViewHolder()方法:

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        Log.d("SteList", "(SongLyricsAdapter) - line #83 - onBindViewHolder called");
        Songs song = dbHelper.getSongDetailsById((int) songsList.get(position).getSongId());
        if (position == selectedSongPosition) {
            // Load the lyrics of the selected song
            String songURI = song.getSongURI();
            String songFileName = song.getSongFileName();
            String lyrics = loadSongLyrics(context, songURI, songFileName);
            
            // Reset TextView state
            holder.lyricsTextView.setText(""); // Clear previous text
            holder.lyricsTextView.setScrollY(0); // Scroll to the top

            // Trim and set the lyrics
            String trimmedLyrics = lyrics.trim();
            holder.bind(trimmedLyrics);

        } else {
            // Clear the lyrics for other positions
            holder.bind("");
        }
    }

下面是扩展和显示文本的xml:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/lyricsTextView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Song Content"
    android:textSize="16sp"
    android:padding="16dp" />

我将感谢任何关于如何解决这个问题的见解或建议. 我可能需要提供更多的代码—请建议其他什么可能是有用的.

谢谢你!

推荐答案

我能够"修复"或更好地"解决"这个问题,通过发送一个不同的对象到RecyclerView adapter. 虽然有问题的额外空白,我发送了arraySongs对象,即使我只是过滤了用户点击的Songs对象,RecyclerView添加了额外的行到view,从而滴答作响的歌曲在List,即使只有一个时间应该加载. 为了解决这个问题,我现在一次只发送一首歌,这是工作正常.

以下是我更新的onBindViewHolder方法:

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {

        // Fetch the details of the selected song using the songId
        Songs song = dbHelper.getSongDetailsById(songId);

        // Load the lyrics of the selected song
        String songURI = song.getSongURI();
        String songFileName = song.getSongFileName();
        String lyrics = loadSongLyrics(context, songURI, songFileName);

        // Reset TextView state
        holder.lyricsTextView.setText(""); // Clear previous text
        holder.lyricsTextView.setScrollY(0); // Scroll to the top

        // Trim and set the lyrics
        String trimmedLyrics = lyrics.trim();
        holder.lyricsTextView.setText(trimmedLyrics);

    }

所以我仍然在使用RecyclerView,并在Songs中滴答作响,但我觉得我仍然缺少一些东西…或许不是.我将把这个留在这里,因为这是我重新编写和完成应用程序的这一部分的原因.

感谢阅读,祝你好运!

Java相关问答推荐

如何用javac编译Java类,即使对像java.lang.*这样的基本类也没有任何依赖关系?

那么比较似乎不是词典学的,尽管doctor 这么说

如何为具有多对多关系的实体的给定SQL查询构建JPA规范?

CriteriaQuery with max

如何使用Java API在Oracle ODI中运行模拟?

只需最少的代码更改即可将版本号标记添加到日志(log)

JPanel透支重叠的JComcoBox

Spark忽略Iceberg Nessie目录

从Spring5迁移到Spring6:无法在雅加达包中找到类

Bean定义不是从Spring ApplationConext.xml文件加载的

在Spring终结点中,是否可以同时以大写和小写形式指定枚举常量?

将java.util.Date转换为OffsetDateTime

把一条整型短裤和两条短裤装成一条长的

如何在JavaFX中制作鼠标透明stage

Lombok@Nonnull是否也对供应商有影响?

寻找Thread.sky()方法的清晰度

如何根据配置动态创建N个bean

Win32函数的JNA绑定DwmGetColorizationColor返回E_INVALIDARG错误

如何使用Java ZoneID的区域设置?

JAVA 正则表达式识别字符串string或字符串内的字符char