有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    直接访问ListView的子视图被认为是不好的做法,可能会导致不当行为

    请改用自定义阵列适配器

    在getView()方法中,只需根据索引中的项目是否正在播放来设置颜色