Проблема с ImageButton.setVisibility()

У меня возникла проблема при настройке видимости двух кнопок изображения друг над другом. Идея состоит в том, чтобы реализовать управление воспроизведением/паузой. Проблема в том, что единственная часть, где настройка видимости действительно работает, — это прослушиватели кликов кнопок. Если я попытаюсь изменить его в другом месте, ничего не произойдет. Любая идея, почему это происходит?

playBtn.setOnClickListener(new OnClickListener() {//PLAY BUTTON LISTENER
    public void onClick(View v) {
 playBtn.setVisibility(ImageButton.GONE);
 pauseBtn.setVisibility(ImageButton.VISIBLE);
 mp.start();
    }});

pauseBtn.setOnClickListener(new OnClickListener() {//PAUSE BUTTON LISTENER
 public void onClick(View v) {
  pauseBtn.setVisibility(ImageButton.GONE);
  playBtn.setVisibility(ImageButton.VISIBLE);
  mp.pause();
 }});

final class SeekBarTask extends TimerTask {
  public SeekBarTask(int duration) {

  }
  @Override
  public void run() {
   if(seekBar.getProgress() >= mp.getDuration()) {//IF SONG HAS FINISHED...
    pauseBtn.setVisibility(ImageButton.GONE);//THESE ONES
    playBtn.setVisibility(ImageButton.VISIBLE);//DOESN'T WORK
    mp.stop();
   }
   else {
   seekBar.incrementProgressBy(100);
   }
  }
 }

person Luis Lopez    schedule 24.04.2010    source источник
comment
возможный дубликат Как я могу удалить кнопку или сделать ее невидимой в Android?   -  person Kate Gregory    schedule 06.12.2012


Ответы (4)


Я бы рекомендовал просто изменить значок одного ImageButton.

person CommonsWare    schedule 24.04.2010

Я бы подумал, что может произойти только одно из двух. Либо этот код никогда не сработает, либо переменные ссылаются не на те экземпляры объектов, на которые вы их ожидаете. Вы поставили точку останова внутри этого условия? Я бы проверил, что там даже есть точка останова, а затем проверил, что переменные указывают на правильные экземпляры кнопок.

Не видя остального кода, я должен спросить ... почему вы проверяете индикатор выполнения на предмет состояния «завершено воспроизведение» по сравнению с использованием медиаплееров при обратном вызове завершения?

Я делаю что-то очень похожее и использую OnCompletionListener MediaPlayer, чтобы изменить видимость моих кнопок.

person Rich    schedule 24.04.2010

Я не помню подробностей манипуляций с графическим интерфейсом Android, но может ли это быть связано с тем, что вы делаете это из другого потока, а не должны?

person JRL    schedule 24.04.2010

я заметил, что установка ImageButton для View.INVISIBLE не работает, когда вы установили для него анимацию. вам нужно удалить анимацию, а затем сделать ее невидимой. неприятная ловушка я думаю...

person martyglaubitz    schedule 08.07.2012