我正在创建一种具有歌曲列表视图的音乐播放器(在当前播放歌曲附近有进度条)
重要的是我有一个带有可以从外部更改的视图的项目(在某些处理程序中)
public View getView(int i, View convertView, ViewGroup viewGroup) {
RelativeLayout result;
if (convertView == null) {
result = (RelativeLayout) inflater.inflate(R.layout.list_item, viewGroup, false);
} else {
result = (RelativeLayout) convertView;
}
...
ProgressBar progressBar = result.findViewById(R.id.progressBar)
...
if (i == currentSong) {
// saving to instance variable
this.currentlyPlayingProgressBar = progressBar;
} else {
progressBar.setVisibility(View.GONE);
}
...
return result;
}
(代码已更改以关注我的问题)
顺便说一句 currentSong 可以从外部更改,在这种情况下正在调用 adapter.notifyDataSetChanged() 。
似乎我使用 listView 不正确,但我不知道更好的方法。
主要问题是我需要链接到视图来更改它们。我能得到它们的唯一方法是在 getView 方法中,它以只有谷歌开发人员可以解释的方式重用这些视图=(
第一个问题
这一切都发生在 Fragment 中,它只是 viewPager 的一部分。当用户滚动此片段然后回滚时,将调用 getView 方法,其中包含一些奇怪的对象。我用这个无效值覆盖 currentPlayingProgressBar。这导致我的状态栏冻结。(它开始更新错误的视图)
而且我不知道它是哪种观点..
第二个问题
我正在重用列表项,这意味着当用户向下滚动列表视图时-有时他实际上会得到具有相同进度条的相同列表项。这个 progressBar 必须是不可见的,但它不是(我认为这完全是因为我从外部使用了 currentPlayingProgressBar)
提前致谢。