尝试访问ListView中的TextView子项返回空值

时间:2014-02-20 15:40:01

标签: java android listview textview

我正在尝试为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());
}

1 个答案:

答案 0 :(得分:0)

直接访问ListView的子视图被视为不良做法,可能导致不当行为。

改为使用自定义数组适配器。

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