我有一個列表視圖,每行有三個圖標。如果我按下圖標(播放),圖標需要將背景更改爲另一個(停止)。然後,如果我點擊不同行中的同一個圖標,之前更改的圖標需要切換到上一個背景(停止播放),並且新點擊的圖標需要將背景更改爲第二個狀態(播放停止) 。列表視圖的行項目imageview更改背景android
這是我使用的代碼,但似乎它不能正常工作。它改變了被點擊的一個,但是如果我點擊新行中的相同圖標,它不會改變先前點擊的行中的圖標。
從適配器:
playSong.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (mediaPlayer.isPlaying() && mediaPlayer != null) {
mediaPlayer.release();
if (oldPosition != -1) {
((AlbumDetails) activity).changePicToPlay(oldPosition,
playSong);
}
mediaPlayer = new MediaPlayer();
} else {
oldPosition = position;
try {
mediaPlayer.setDataSource(data.get(position)
.getSONG_MP3());
final ProgressDialog bufferingDialog = new ProgressDialog(
activity);
bufferingDialog.setMessage(activity
.getString(R.string.buffering));
bufferingDialog.show();
mediaPlayer.prepareAsync();
mediaPlayer
.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer arg0) {
bufferingDialog.dismiss();
mediaPlayer.start();
}
});
postData(1, position);
mediaPlayer
.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer arg0) {
playSong.setBackgroundResource(R.drawable.play_nr);
mediaPlayer.release();
}
});
((AlbumDetails) activity).changePicToStop(oldPosition);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
});
從我的活動:
public void changePicToStop(int position) {
View vi = listView.getChildAt(position);
if (vi != null) {
ImageView playSong = (ImageView) vi
.findViewById(R.id.songs_item_play);
playSong.setBackgroundResource(R.drawable.stop);
}
}
public void changePicToPlay(int position, ImageView image) {
View vi = listView.getChildAt(position);
if (vi != null) {
image.setBackgroundResource(R.drawable.play_nr);
listView.refreshDrawableState();
}
}
您應該處理適配器'getView()'方法中的點擊和後續更改。 – Vikram
@vikram你能給我一個答案的例子嗎? –
你從哪裏得到你的位置和舊位置變量 - 可能是他們有問題。 Btw:listView.getChildAt(position)方法計算可見子項的數量。不是適配器中使用的數字。因此,vikrma建議您應該更新您的支持模型,然後告訴ListAdapter數據已更改 - 這是一種更簡單的方法。 –