I am developing a Music Player. All songs are placed in the ListView
with a ImageButton
. This button is playing and pause the songs. So I am using getview()
. But when I am clicking on the ImageButton
, the songs are playing and pausing, but the image of play/pause is not changing. My main issue as I think, is that, when I am clicking on the ImageButton
it is not calling the getview()
. So please help me.
@Override
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.activity_ringtones);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ringtones);
mAdapter = new RingtonesMusicAdapter(this, R.layout.ringtones_row);
mListView.setAdapter(mAdapter);
}
public void invalidatePlayButtons(int position) {
for (int i = 0; i < mTrackData.size(); i++) {
if (i != position) {
try {
//mTrackData.get(i).getRowItem().mPlayButton.setImageResource(R.drawable.play);
if (MusicManager.getInstance().isPlaying(mTrackData.get(i))) {
MusicManager.getInstance().stop();
mTrackData.get(i).getRowItem().mProgressBar
.setProgress(0);
}
} catch (Exception ex) {
ex.printStackTrace();
}
} else
mTrackData.get(i).getRowItem().mPlayButton
.setImageResource(R.drawable.pause);
}
}
public void onPlayClick(View view) {
Object obj = view.getTag();
if (obj != null && obj.getClass() == RowItem.class) {
final RowItem rowItem = (RowItem) obj;
if(rowItem.mPosition != mChantIndex ){
if (!MusicManager.getInstance().isPlaying(rowItem)) {
invalidatePlayButtons(rowItem.mPosition);
MusicManager.getInstance().showProgressAnimation(rowItem.mProgressBar);
// rowItem.mPlayButton.setImageResource(R.drawable.pause);
if(rowItem.isPause){
//rowItem.mPlayButton.setImageResource(R.drawable.pause);
MusicManager.getInstance().setLengthTrack();
}else{
rowItem.mMusicListener = this;
MusicManager.getInstance().playDownloadedTrack(rowItem);
if(rowItem.mPosition == mProgressbarIndex) {
mProgressbarIndex = -1;
}
else {
mProgressbarIndex = rowItem.mPosition;
}
}
}else if(MusicManager.getInstance().isPlaying(rowItem)){
MusicManager.getInstance().pauseTrack(rowItem);
MusicManager.getInstance().getLengthTrack();
//rowItem.mPlayButton.setImageResource(R.drawable.play);
rowItem.isPause = true;
}
}
}else {
invalidatePlayButtons(-1);
}
//mAdapter.notifyDataSetChanged();
}
@Override
public void onRefreshData(Refreshable refreshable, int requestCode) {
if (requestCode == SoundCloudManager.BITMAP_DATA) {
mAdapter.notifyDataSetChanged();
}
class RingtonesMusicAdapter extends ArrayAdapter<LinearLayout>{
Context mContext;
int mResource;
public RingtonesMusicAdapter(Context context, int resource) {
super(context, resource);
mContext =context;
mResource = resource;
}
@Override
public int getCount() {
return mTrackData.size();
}
public LinearLayout getItem(int position) {
return null;
}
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LinearLayout row;
LayoutInflater inflater = ((Activity) mContext).getLayoutInflater();
row =(LinearLayout)inflater.inflate(mResource, parent, false);
RowItem rowItem = new RowItem(position);
mTrackData.get(position).setRowItem(rowItem);
rowItem.mTrack = mTrackData.get(position);
rowItem.setupRowForRingtone(row);
return row;
}
@Override
public boolean isEnabled(int position) {
return true;
}
}
Method rowItem.setupRowForRingtone(row)
has the code for changing the play/pause the image.