我正在尝试为Android制作MP3播放器。我已将播放器中的所有曲目加载到ListView(曲目是TextView):
String[] titles = player.getTitles();
trackList.setAdapter(new ArrayAdapter<String>(this, R.layout.track,titles));
当我尝试将当前正在播放的曲目描绘为红色时,由于null指针异常,它会描绘随机的孩子或崩溃。我已经尝试过各种方式,并且已经达到了我不太了解ListView方法如何工作的程度。
这些是我用来将每个轨道描绘成黑色的方法,然后选择一个红色:
public void paintBlack() {
for (int i = trackList.getFirstVisiblePosition(); i < trackList.getLastVisiblePosition(); i++){
if (trackList.getChildAt(i)==null) {
System.out.println("Child is somehow null");
return;
}
((TextView)trackList.getChildAt(i)).setTextColor(Color.BLACK);
}
}
public void paintRed() {
for (int i = trackList.getFirstVisiblePosition(); i < trackList.getLastVisiblePosition();i++){
if (trackList.getChildAt(i)==null) {
System.out.println("Child is somehow null");
return;
}
String view = ((TextView)trackList.getChildAt(i)).getText().toString();
if (player.getTrack().equals(view)){
((TextView)trackList.getChildAt(i)).setTextColor(Color.RED);
}
}
我在重新绘制之前调用setSelection方法,因此视图始终位于正确的轨道上:
public void updateTrackList() {
trackList.setSelection(player.getCurrent());
}
答案 0 :(得分:0)
直接访问ListView的子视图被视为不良做法,可能导致不当行为。
改为使用自定义数组适配器。
在getView()方法中,只需根据索引中的项目是否正在播放来设置颜色。