2014-02-20 3 views
0

Android 용 MP3 플레이어를 만들려고합니다. 때문에 nullpointer 예외에ListView에서 TextView 자식에 액세스하려고하면 null 값이 반환됩니다.

String[] titles = player.getTitles(); 
trackList.setAdapter(new ArrayAdapter<String>(this, R.layout.track,titles)); 

나는 현재 재생중인 트랙 빨간색 페인트하려고, 그것은 임의 어린이나 충돌 페인트 : 나는 (트랙은 텍스트 뷰입니다) ListView가에있는 플레이어의 모든 트랙을로드 한 . 모든면에서 시도해 봤지만 ListView 메서드가 어떻게 작동하는지 이해하지 못했습니다. 내가 다시 칠하기 전에 setSelection 메서드를 호출

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); 
    }   
} 

때문에보기가 올바른 궤도에 항상 :

이는 선택된 하나 개의 빨간색 나는 모든 트랙 검은 색을 칠하는 데 사용하는 방법이 있고,

public void updateTrackList() { 
    trackList.setSelection(player.getCurrent()); 
} 

답변

0

ListView의 자식 뷰를 직접 처리하는 것은 나쁜 습관으로 간주되어 오작동을 유발할 수 있습니다.

대신 사용자 지정 배열 어댑터를 사용하십시오.

getView() 메소드에서 인덱스의 항목이 재생 중인지 여부에 따라 색상을 설정하면됩니다.

+0

사용자 지정 어댑터를 사용하는 방법을 잘 모르겠습니다. – user3333414

관련 문제