BaseAdapter의 메소드 getView() 메소드는 뷰를 제공하며 목록에 변수를 설정하고 변수가 설정되지 않은 경우 해당 색상을 기본값으로 재설정하여 현재 트랙의 색상을 변경해야합니다.
if (is this the current playing track) {
// Set the color of the view.
} else {
// Set the color to default.
}
현재이 논리를 구현 한 경우 당신은 또한 현재 트랙 및 현재 재생중인 미디어를 추적 목록에서 변수, 간단한 songAdt.notifyDataSetChanged()를 변경할 때마다, 다음가에 BaseAdapter를 요청합니다 다시 호출하고 새 데이터에 따라보기를 설정합니다. ListView에 대해 더 깊이 이해하려면 this talk을 참조하십시오. 도움이 될거야.
RecyclerView와 함께 자신을 트레이닝하는 것이 좋습니다. ListView는 무서운 과거였습니다.
public class Activity implements SongChangedListener {
...
@Override
onCreate() {
....
PlayerManager pManager = new PlayerManager();
}
onResume() {
pManager.setListener(this);
}
onPause() {
pManager.setListener(null);
}
@Override
void songChanged (MediaId idOfSong) {
if (getActivity == null) //If you received a callback after activity was killed.
return;
// Change the current song as not playing in List. (for your adapter)
// Change the idOfSong to currently playing in List (for your adapter).
// change currentSong = idOfSong;
// notify that the data in List has changed (songAdt.notifyDataSetChanged)
}
}
그리고 PlayerManager에서 인터페이스를 만들거나 인터페이스의 별도 클래스를 만들 수 있습니다. 인터페이스 인스턴스를 보내는 방법에 관계 없습니다.
public class PlayerManager {
...
private SongChangedListener mListener;
...
public PlayerManager() {
}
public void setListener(SongChangedListener listener) {
mListener = listener;
}
public interface SongChangedListener {
void songChanged(MediaId idOfSong);
}
...
public void playSong() {
...
if (mListener != null)
mListener.songChanged(idOfNextSong);
...
}
귀하의 답변에 여러 가지면에서 잘못된 느낌을주는 활동이 귀하의 서비스에 전달됩니다. 활동과 서비스 간의 통신을 구현하려는 경우이를 수행 할 수있는 여러 가지 방법이 있습니다. 일반적으로 Handler와 함께 Messenger를 사용합니다. 더 자세한 내용을 제공 하겠지만 문서 및 기타 답변에서 탐색하면 더 유용 할 것입니다. 메신저가 어떻게 작동하는지 이해하면 구현하기 쉽습니다.
또한 완전 완성 MediaPlayer 응용 프로그램을 찾고 있다면 구현시 더 많은 보일러 코드가 필요합니다. 또한 MediaButton 클릭 (누군가가 블루투스 헤드폰이나 시계에서 재생/일시 중지를 클릭 한 경우)을 처리해야합니다. 바람직하게는 MediaSessionCompat이 더 나은 구현입니다. android-UniversalMusicPlayer의 최소 필수 기능을 모두 구현 한 다음 소스 미디어 플레이어를 참조 할 수도 있습니다.
() 내 주요 활동 수업에서. 나는 수동으로 노래를 바꿀 때 그것을 사용한다. 이 문제는 완료 후 MediaPlayer가 자동으로 다음 노래로 전환 할 때 발생합니다. songAdt를 알 수 없으므로 MediaPlayer 클래스에서 songAdt.notifyDataSetChanged()를 호출 할 수 없습니다. – PatriceG
콜백을 추가하고, 미디어 플레이어 클래스에서 인터페이스를 만들고, songChanged() 메서드를 사용하십시오. mainActivity에서이 인터페이스를 구현하고 MediaPlayer 클래스에서 노래를 변경하면이 메서드가 호출되어 노래 변경이 ur mainActivity에 반영됩니다. 액티비티를 변경 사항에 알리기 위해 콜백과 함께 사용되는 꽤 일반적인 디자인입니다. – Roadblock
U mainActivity의 인스턴스를 MediaPlayer 클래스에 전달해야합니다 (MediaPlayers 생성자 사용). 이 인스턴스를 사용하여 songChanged 메서드를 호출합니다. – Roadblock