描述: 我的 Android 应用程序遇到问题。我有
List
文本文档标题。单击 item
中的一个 list
将打开 RecyclerView
中的文本文档 - 文档加载到 TextView
中。然后,用户可以向左滑动 TextView
以加载下一个 item
(下一个文本文档),或向右滑动以查看 item
中的上一个 List
(上一个文本文档)。 注意:在我的应用程序开发中,目前我还没有在代码中实现滑动逻辑。 我发现 RecyclerView
添加了空格/换行符,如下所示,使用 List
包含 15 个项目:
list
中的第一项,文本文档将打开,RecyclerView
顶部没有任何额外的空白 - 这就是我想要的 - 但是在末尾有大约 14 个换行符项目 - 文本文档中没有额外的空白item
,例如项目#8,文本文档上方将有 7 个换行符,并且末尾会添加 7 个额外换行符item
,文档顶部将添加大约 14 个换行符,但文本末尾不会添加额外的换行符item
List's
执行测试,但是如果我使用 single
List
(单个文本文档)创建一个新的 item
,则此文档可以完美打开,并且文件上方或下方没有任何额外空间文字list
中的 items
,单击第一个 item
顶部没有任何空白,底部全部空白。对于我的 15 个 list
中的 items
,单击 item
中的最后一个 list
,所有空白都在顶部,而底部不包含空白,文本结束并且滚动相应停止。使用Log语句: 当我向下滚动列表时,
onBindViewHolder()
方法会被多次调用,如果我rem
出“清除”代码:
//holder.bind("");
项目中似乎添加了额外的换行符。同样,在向后滚动时,额外的换行符仍然存在,并且现在出现同一文本文档的多次迭代
item
,并且空白量不断增加。因此,如果没有 holder.bind("");
代码,当我上下滚动页面时,RecyclerView
会动态添加文本文档的迭代。
我尝试了以下方法来解决该问题,但没有任何效果:
确保
onBindViewHolder()
内部逻辑高效且
不执行不必要的操作。
验证我的
ViewHolder
实现正确回收视图
并用新数据更新其内容
检查数据一致性并正确通知适配器任何情况 使用
notifyDataSetChanged()
进行更改。
在
onBindViewHolder
中移动了我的条件逻辑,因此我重置了TextView for every
项目`
我有
cleaned project
和rebuilt 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
发送不同的对象来“修复”或者更好地“解决”这个问题。虽然遇到额外空白的问题,但我发送了 array
对象的 Songs
,即使我只过滤用户单击的 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
上勾选,但是我觉得我仍然缺少一些东西......或者也许没有。我将把它留在这里,因为这让我回到编码并完成应用程序的这一部分。
感谢您的阅读,祝您好运!