猿问

更改 ListView 中单个视图的外观

我正在开发一个音乐应用程序。我想加粗当前正在播放的歌曲信息(例如 Google Play 音乐)。有一个所有歌曲的 ListView,由每首歌曲的歌曲信息的 RelativeLayout 填充。通过单击 ListView(可以播放任何歌曲)或按上一首或下一首(将播放相邻歌曲)来播放歌曲。

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

我需要能够

  • 根据给定的位置编辑视图,该位置可能在屏幕外

  • 保持一个特定的视图加粗,无论它是否在屏幕上(例如,我不能将视图默认为 Typeface.NORMAL,因为滚动并返回到一首歌会重置它)

  • 播放完成后将之前播放的歌曲恢复正常

我在这里查看了 GPM 源代码但我不知道它在哪里执行此操作。任何帮助将不胜感激 :)


万千封印
浏览 160回答 1
1回答

ITMISS

无论您使用ListView或RecyclerView,解决方案的通用模板都是相同的:您应该存储对 (a) “当前播放”索引或 (b) “当前播放”数据项的引用。让我们看看如果您使用ListView并保存“当前播放”索引,将会有什么解决方案。第一步将是一些变量来保存当前播放的内容。也许您使用 anint并将特殊值-1视为没有播放的意思。private int currentlyPlayingPosition;每当您更改当前正在播放的任何歌曲时,您都会更新此处存储的值(可能++currentlyPlayingPosition在用户按下“下一首歌曲”等时)。然后,您还必须打电话adapter.notifyDataSetChanged()告诉ListView重新绘制自己,以便粗体歌曲发生变化。在您的getView()方法中,您可以检查您正在绘制的视图是否是“当前正在播放”的歌曲,并根据此更改字体:@Overridepublic 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()检查你正在显示的歌曲是否是当前正在播放的歌曲,如果是,则显示特殊的用户界面
随时随地看视频慕课网APP

相关分类

Java
我要回答