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:
- The Log doesn´t work because of a wrong filter in the logcat console
- The Toast dosn´t work because of the wrong passed context
- 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
Post a Comment