Здравствуйте, я прямо сейчас делаю бесплатный курс Udacity для создания приложения для перевода. И была задача, чтобы ListItem из ArrayList воспроизводил звук onClick. Они сказали, что вы можете сделать это самостоятельно или с учебниками. Поэтому я сделал это самостоятельно и пропустил учебники, которые показали, как это сделать. Теперь я вернулся к учебникам с моим рабочим кодом. И чем они дали нам еще одну задачу. Чтобы освободить ресурсы с помощью метода OnStop и после того, как MediaPlayer перестает играть. Но я выполнил предыдущую задачу не так, как в учебнике. И теперь я застреваю, чтобы выполнить новую задачу.Как мне изменить My OnClickListener, чтобы остановить currentSound и запустить новый One OnClick
Я создал собственный адаптер «WordAdapter», и у меня есть 4 активности.
В WordAdapter я сделал 2 глобальных значения:
частного MediaPlayer игры; private int isPlaying;
В @OverrideMethod Я установил значение isPlaying равным 0;
isPlaying = 0;
и я создал OnClicklistener
private MediaPlayer.OnCompletionListener mOnCompletion = new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
isPlaying = 0;
releaseMediaPlayer();
}
};
И я создал ширина ImageButton в OnClickListener
ImageButton playIcon = (ImageButton) listItemView.findViewById(R.id.playIcon);
int colorOfThePlayIcon = ContextCompat.getColor(getContext(), mColorResourceId);
playIcon.setBackgroundColor(colorOfThePlayIcon);
playIcon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
play = MediaPlayer.create(getContext(), currentWord.getPlaySound());
if (isPlaying == 1) {
play.stop();
play.reset();
play.create(getContext(), currentWord.getPlaySound());
play.start();
isPlaying = 1;
}
if (isPlaying == 0) {
play.start();
isPlaying = 1;
}
play.setOnCompletionListener(mOnCompletion);
}
});
, чем я сделал releaseMediaPlayerMethod:
public void releaseMediaPlayer() {
if (play != null){
play.release();
play = null;
}
}
чем в Акти Vity Я сделал метод OnStop:
@Override
protected void onStop() {
super.onStop();
WordAdapter stopSoundAndReleasIt = new WordAdapter(this);
stopSoundAndReleasIt.releaseMediaPlayer();
}
Так что этот код должен освободить ресурсы от MediaPlayer после слова закончил играть. И когда действие прекращается после того, как пользователь покинул приложение, ресурсы также должны быть выпущены. И когда я нажимаю на playIcon, пока MediaPlayer воспроизводит звук, он должен остановить текущий звук и начать воспроизведение нового выбранного. И если я покидаю приложение, когда MediaPlayer воспроизводит звук, он должен сначала остановить звук, а затем освободить ресурсы.
Но если я нажму на playIcon, приложение не остановит текущий звук и не запустит новый. Его просто играли оба звука. Или три звука, если я нажму три раза.
И если я покину приложение, он также не остановит текущий звук.
Так что же мне нужно изменить, чтобы остановить текущий звук onClick?
Я думаю, что вы должны создавать медиаплеер вне метода 'onClick (...)'. Как и сейчас, вы всегда вызываете 'stop()' и 'release()' во вновь созданном экземпляре 'MediaPlayer' – Titus
Спасибо за ваш ответ. Но если я беру '.create' из метода' onClick (...) ', приложение перестает работать, когда я нажимаю на playIcon. И я думаю, что если звук не воспроизводится, метод 'stop()' не вызывается, потому что. Значение isPlaying устанавливается равным 0 при создании приложения и методом onCompletion. –