0

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.

Community
  • 1
  • 1
Amit Jayaswal
  • 1,725
  • 2
  • 19
  • 36

0 Answers0