java试图访问ListView中的TextView子级时返回空值
我正在尝试为Android制作一个mp3播放器。我已将播放器中的所有曲目加载到列表视图中(曲目是文本视图):
String[] titles = player.getTitles();
trackList.setAdapter(new ArrayAdapter<String>(this, R.layout.track,titles));
当我尝试将当前播放的曲目绘制为红色时,它会绘制随机的子项或由于空指针异常而崩溃。我已经尝试了各种方法,但已经到了我不太了解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());
}
# 1 楼答案
直接访问ListView的子视图被认为是不好的做法,可能会导致不当行为
请改用自定义阵列适配器
在getView()方法中,只需根据索引中的项目是否正在播放来设置颜色