2014-09-17 3 views
0

У меня есть проблема, которая также обсуждается здесь: onBackPressed never gets calledonBackPressed() не работает для меня

Я пытаюсь отменить CountDownTimer при нажатии на кнопку нативную назад от телефона Android. Поэтому я хотел бы переопределить метод onBackPressed, чтобы отменить таймер и вернуться к другому действию, но только один раз. (чтобы вернуться к основному действию, например, к домашней кнопке).

Это часть кода:

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_my); 

    if (getResources().getConfiguration().orientation== Configuration.ORIENTATION_LANDSCAPE){ 
     ImageView und1=(ImageView)findViewById(R.id.undita1); 
     ViewGroup.LayoutParams params = (ViewGroup.LayoutParams) und1.getLayoutParams(); 
     params.height=150; 
     und1.setLayoutParams(params); 
     ImageView und2=(ImageView)findViewById(R.id.undita2); 
     ViewGroup.LayoutParams params2 = (ViewGroup.LayoutParams) und2.getLayoutParams(); 
     params2.height=150; 
     und2.setLayoutParams(params2); 
     ImageView und3=(ImageView)findViewById(R.id.undita3); 
     ViewGroup.LayoutParams params3 = (ViewGroup.LayoutParams) und3.getLayoutParams(); 
     params3.height=150; 
     und3.setLayoutParams(params3); 
    } 

     mProgressBar=(ProgressBar)findViewById(R.id.progressBar); 
     mProgressBar.setProgress(0); 
     mCountDownTimer=new CountDownTimer(90000,1000) { 
      int i=0; 
      @Override 
      public void onTick(long millisUntilFinished) { 
       Log.v("Log_tag", "Tick of Progress" + i + millisUntilFinished); 
       i++; 
       mProgressBar.setProgress(i); } 
      @Override 
      public void onFinish() { 
       i++; 
       mProgressBar.setProgress(i); 
       Intent in = new Intent(getApplicationContext(), MyActivity2.class); 
       startActivity(in); 
      } 
     }; 
     mCountDownTimer.start(); 

     android.view.Display display = ((android.view.WindowManager)getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
     Bundle b; 
     b = getIntent().getExtras(); 
     nivel= b.getInt("level"); 
     TextView niv=(TextView) findViewById(R.id.Nivel); 
     niv.setText("Level: "+ nivel); 
     generare_3_diferente(nivel);} 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 

     getMenuInflater().inflate(R.menu.my, menu); 
     return true;} 
    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 

     int id = item.getItemId(); 
     if (id == R.id.action_settings) { 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 

    @Override 


    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     if ((keyCode == KeyEvent.KEYCODE_BACK)) { //Back key pressed 
      mCountDownTimer.cancel(); 
      Intent in = new Intent(getApplicationContext(), MyActivity2.class); 
      startActivity(in); 
      mCountDownTimer.cancel(); 
      return true; 
     }else{ 
      return super.onKeyDown(keyCode, event); 
     } 
    } 


    @Override 
    public void onBackPressed(){ 
     mCountDownTimer.cancel(); 
     Intent in = new Intent(this, MyActivity2.class); 
     startActivity(in); 

     super.onBackPressed(); 

    } 

} 
+0

и в чем же проблема? – Opiatefuchs

+0

Часть ответа на связанный вопрос: «если вы переопределите оба варианта: onBackPressed() и onKeyDown(), оба поймают заднее нажатие, когда onKeyDown поймает его первым. Если вы вызываете super.onKeyDown в onKeyDown, тогда метод onBackPressed Если вы не назовете super.onKeyDown, то onBackPressed никогда не будет вызван. " Это действительно то, что вы хотите? –

+0

Нет, я думал, что 2 функции охватывают все версии Android ... Я хочу как-то остановить таймер и заставить кнопку «Назад» вернуться только один раз к основному действию, к которому пользователь может выбирать между уровнями игры. – KrasivaM

ответ

1

onBackPressed должен быть в основном классе активности

Также попробуйте указать родительские и дочерние действия в файле манифеста приложения, например

android:parentActivityName 

и попытаться использовать что-то вроде этого и восстановить ваш App

@Override 
public void onBackPressed() { 
super.onBackPressed(); 
i = new Intent(CurrentActivity.this, NextActivity.class); 
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(i); 
finish(); 
} 

Если он по-прежнему не работает, попробуйте создать новое приложение и импортировать файлы

+0

Большое вам спасибо! Это решило мою проблему! – KrasivaM

+0

Добро пожаловать, в любое время – boudi

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