2016-08-29 3 views
0

Я новичок, когда дело доходит до Android Studio/Java, поэтому, пожалуйста, простите меня, если вопрос будет глупым.Отключение/включение кнопки «Продолжить»

Я почти закончил свое первое приложение, которое является простой игрой загадки; задается вопрос, и с правильным ответом вы переходите к следующему действию - и так далее. В главном меню есть два варианта, как обычно: Новая игра и продолжение. Кнопка «Продолжить» работает как прелесть, используя общие настройки - при нажатии она возвращает вас к последнему вопросу, на который вы не ответили.

Моя проблема: я не могу отключить кнопку Продолжить по умолчанию, а затем включен, когда на первый вопрос будет дан ответ. Ну, правда, я могу отключить его с помощью

@Override 
    public void onResume() { 
    super.onResume(); 
    setContentView(R.layout.activity_main_menu_with_logo); 

    mContinueButton = (Button)findViewById(R.id.ContinueButton); 
    mContinueButton.setEnabled(false); 
    ... 
    } 

, но я не нашел способ сделать это позволило позже. Я подумал, что, написав

if (!(question00Answered)) { 

       mContinueButton.setEnabled(true); 

       Intent intent = new Intent(MainMenuWithLogo.this, Question00.class); 
       startActivity(intent); 
       overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out); 
       finish(); 

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

Вот полный скрипт:

MainMenuWithLogo.Java

public class MainMenuWithLogo extends AppCompatActivity { 

private Button mStartInterrogationButton; 
private VideoView mLogoprwto; 
private Button mContinueButton; 
MediaPlayer song; 


@Override 
protected void onPause() { 
    super.onPause(); 
    song.release(); 
} 

@Override 
public void onResume() { 
    super.onResume(); 
    setContentView(R.layout.activity_main_menu_with_logo); 
    overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out); 
    song = MediaPlayer.create(this, R.raw.chopin); 
    song.start(); 
    song.setLooping(true); 




    mLogoprwto = (VideoView) findViewById(R.id.logoprwto); 
    mLogoprwto.setVideoPath("android.resource://its_destination/"+R.raw.teloslogo); 
    mLogoprwto.start(); 

    mLogoprwto.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 

     @Override 
     public void onCompletion(MediaPlayer mp) { 

      mLogoprwto.start(); 
     } 
    }); 

    mStartInterrogationButton = (Button)findViewById(R.id.StartInterrogationButton); 
    mStartInterrogationButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out); 
      startGame(); 

     } 
    }); 

    mContinueButton = (Button)findViewById(R.id.ContinueButton); 
    mContinueButton.setEnabled(false); 

    mContinueButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      SharedPreferences prefs = getSharedPreferences("Stage", MODE_PRIVATE); 
      boolean question00Answered = prefs.getBoolean("QuestionZero", false); 
      boolean question01Answered = prefs.getBoolean("QuestionOne", false); 
      boolean question02Answered = prefs.getBoolean("QuestionTwo", false); 




      if (!(question00Answered)) { 

       mContinueButton.setEnabled(true); 

       Intent intent = new Intent(MainMenuWithLogo.this, QuestionZero.class); 

       startActivity(intent); 
       overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out); 
       finish(); 
      } else if (!(question01Answered)) { 

       mContinueButton.setEnabled(true); 


       Intent intent = new Intent(MainMenuWithLogo.this, QuestionOne.class); 
       startActivity(intent); 
       overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out); 
       finish(); 
      } else if (!(question02Answered)) { 

       mContinueButton.setEnabled(true); 

       Intent intent = new Intent(MainMenuWithLogo.this, QuestionTwo.class); 
       startActivity(intent); 
       overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out); 
       finish(); 
      }else { 

       mContinueButton.setEnabled(true); 

       Intent intent = new Intent(MainMenuWithLogo.this, End.class); 
       startActivity(intent); 
       overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out); 
       finish(); 
      } 

     } 
    }); 

} 

private void startGame() { 
Intent intent = new Intent(this, Intro.class); 
startActivity(intent); 
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out); 
finish(); 
} 
    @Override 
    public void onBackPressed() { 
    Intent intent = new Intent(Intent.ACTION_MAIN); 
    intent.addCategory(Intent.CATEGORY_HOME); 
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivity(intent); 
} 
} 

ответ

0

Вы включаете кнопку на неправильной деятельности. Вот то, что ваш код делает, в схематичной форме:

  1. OnClick() работает на активность # 1 в mContinueButton
  2. активности # 1 в mContinueButton включен
  3. активности # 2 запускаются
  4. активности # 1 (вместе с его mContinueButton, который является единственным включенным в данный момент) уничтожается до того, как активность № 2 даже открывается, b/c вызова finish().

Чтобы исправить это, позвоните по телефону setEnabled(true) в onResume(). Удалите setEnabled(true) звонки с onClick(). Например:

  1. Отключить кнопку.
  2. Изучите ваши предпочтения Булевы. Если какой-либо из них неверен, вызовите setEnabled(true).
  3. Установите обработчик кнопки onClick(). Здесь не нужно звонить setEnabled() (b/c это решение уже принято), но сохраняйте инструкции if/then и весь другой код там, потому что вам все равно нужно выбрать, какую активность открыть.

Обратите внимание, что вы указали обработчик onClick() как closure. Код в этой функции не запускается при выполнении onResume(); он запускается, когда пользователь нажимает разрешенное представление.

Ваш желтый ящик не вызовет никаких проблем в настоящий момент; обратитесь к this question для решения.

+0

Я начинаю понимать логику этого. Итак, насколько выше код, то я должен записать это так: «mContinueButton = (Button) findViewById (R.id.ContinueButton); mContinueButton.setEnabled (ложь); mContinueButton.setEnabled (правда);" under onResume() и удалить «mContinueButton.setEnabled (true)»; строки из onClick()? Или мне нужно также внести изменения в другие действия? Потому что я сделал то, что вы сказали, но теперь кнопка всегда включена. Кроме того, mContinueButton.setEnabled (false); появляется в желтом поле: http://i.imgur.com/wfbjWPV.jpg – Animated24

+0

Я добавил более подробную информацию к ответу. – greeble31

Смежные вопросы