Android OnBackPressed() Is Not Being Called?


Answer :

This question is already answered, but I feel to clear something here in this topic. Most comments and answeres point out to use super.onBackPressed() and that this is the cause of the not working method onBackPressed(). But that is not correct and important to let other beginners know. The method onBackPressed() does not need to use super.onBackPressed() . onBackPressed()also works if somebody, for example, comment super.onBackPressed() out.

As the questionier has written, he won´t use super.onBackPressed() because it will close the activity. So, the cause of this why it isn´t working, could be seperated into three possible causes:

  1. The Log doesn´t work because of a wrong filter in the logcat console
  2. The Toast dosn´t work because of the wrong passed context
  3. The OS is implemented wrong by the supplier.

Usually, the toast works by passing the correct context. In the case of questioner, simply passing this .

@Override public void onBackPressed() {     Log.d("MainActivity","onBackPressed");     Toast.makeText(this,"onBackPressed",Toast.LENGTH_SHORT).show(); } 

For the Log, simply set the correct filter on logcat.

I don´t care if somebody give downvotes now, but it must be clear for other beginners, that super.onBackPressed() must not be used.

Anyway, the use of onKeyDown() also is a solution.


The onBackPressed() is a default action called from onKeyDown() in API < 5 and a default action called from onKeyUp() from API level 5 and up. If onKeyUp() does not call super.onKeyUp(), onBackPressed() will not be called.

Documentation onKeyDown()

Documentation onKeyUp().

@Override public boolean onKeyUp(int keyCode, KeyEvent event) {     /*      * without call to super onBackPress() will not be called when      * keyCode == KeyEvent.KEYCODE_BACK      */     return super.onKeyUp(keyCode, event); } 

Also another reason that onBackPressed() may not be called is because you are using the soft back button on the actionbar, it that case the following is needed:

@Override public boolean onOptionsItemSelected(MenuItem item) {     // Handle action bar item clicks here. The action bar will     // automatically handle clicks on the Home/Up button, so long     // as you specify a parent activity in AndroidManifest.xml.     switch (item.getItemId()) {         case android.R.id.home:             onBackPressed();             return true;         default:             return super.onOptionsItemSelected(item);     } } 

You are missing, super.onBackPressed();

@Override public void onBackPressed() {     super.onBackPressed(); } 

or you can use

@Override   public boolean onKeyDown(int keyCode, KeyEvent event)   {        //replaces the default 'Back' button action        if(keyCode==KeyEvent.KEYCODE_BACK)   {   // something here             finish();      }        return true;    }   

thanks


Comments

Popular posts from this blog

Converting A String To Int In Groovy

"Cannot Create Cache Directory /home//.composer/cache/repo/https---packagist.org/, Or Directory Is Not Writable. Proceeding Without Cache"

Android How Can I Convert A String To A Editable