Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 更改ListView中单个视图的外观_Java_Android_Android Layout_Listview - Fatal编程技术网

Java 更改ListView中单个视图的外观

Java 更改ListView中单个视图的外观,java,android,android-layout,listview,Java,Android,Android Layout,Listview,我正在开发一个音乐应用程序。我想加粗当前播放的歌曲的信息(例如谷歌播放音乐)。有一个所有歌曲的列表视图,由每首歌曲的歌曲信息的相对列表填充。通过单击ListView(可播放任何歌曲)或按previous或next(将播放相邻歌曲)播放歌曲 我不想使用ScrollView,因为歌曲库可能有大量的条目要显示 我需要能够 基于给定位置编辑视图,该位置可能在屏幕外 无论某个视图是否在屏幕上,都要将其保持为粗体(例如,我不能将视图默认为字体。正常,因为滚动到某首歌曲会将其重置) 播放完成后,将先前播放的

我正在开发一个音乐应用程序。我想加粗当前播放的歌曲的信息(例如谷歌播放音乐)。有一个所有歌曲的列表视图,由每首歌曲的歌曲信息的相对列表填充。通过单击ListView(可播放任何歌曲)或按previous或next(将播放相邻歌曲)播放歌曲

我不想使用ScrollView,因为歌曲库可能有大量的条目要显示

我需要能够

  • 基于给定位置编辑视图,该位置可能在屏幕外
  • 无论某个视图是否在屏幕上,都要将其保持为粗体(例如,我不能将视图默认为字体。正常,因为滚动到某首歌曲会将其重置)
  • 播放完成后,将先前播放的歌曲恢复到正常状态

我看过GPM的源代码,但我不知道它是在哪里实现的。任何帮助都将不胜感激:)

无论您使用的是
ListView
还是
RecyclerView
,解决方案的通用模板都是相同的:您应该存储对(a)“当前播放”索引或(b)“当前播放”数据项的引用

让我们看看如果使用
ListView
并保存“当前播放”索引,解决方案是什么

第一步是一些变量来保存当前播放的内容。可能您使用了一个
int
,并将特殊值
-1
视为没有播放任何内容

private int currentlyPlayingPosition;
无论何时更改当前播放的歌曲,都会更新存储在此处的值(当用户按“下一首歌曲”时,可能会更新存储在此处的值)。然后,您还必须调用
适配器.notifyDataSetChanged()
来告诉
列表视图重新绘制自身,以便粗体歌曲发生变化

getView()
方法中,您可以检查正在绘制的视图是否为“当前播放”歌曲,并根据该歌曲更改字体:

@Override
public View getView(int position, View convertView, ViewGroup container) {
    ...
    if (position == currentlyPlayingPosition) {
        textView.setTypeface(textView.getTypeface(), Typeface.BOLD);
    } else {
        textView.setTypeface(textView.getTypeface(), Typeface.NORMAL);
    }
    ...
}
总体步骤相对简单:

  • 跟踪当前播放的歌曲(通过索引、对象引用或其他方式)
  • 当当前播放的歌曲发生变化时,通知适配器
  • getView()
    内部检查您正在显示的歌曲是否是当前正在播放的歌曲,如果是,则显示特殊用户界面
使用a并保留当前播放歌曲的索引,当您重新绘制索引项时,请将文本加粗,以及您需要的其他内容。(RecyclerView甚至可能会记住状态,这意味着你可以使用事件和激发并忘记。我记不清它的行为了)