重写onBackPressed()

概述

onBackPressed()是用户点击Back键时系统调用的方法,用于从当前Activity返回到上一个Activity。在代码中调用此方法也会起到“按”Back键的效果。可以重写此方法以达到自定义目的。

onBackPressed()的原定义

onBackPressed()方法在Activity.java中定义:

public void onBackPressed() {
    ...
    //the last statement in original defination
    finishAfterTransition();
}

 查看onBackPressed()方法的定义内容,可以看到在所有代码的最后,onBackPressed()方法调用了finishAfterTransition()方法,finishAfterTransition()finish()的作用区别在于,使用finishAfterTransition()来结束Activity,在页面跳转时会有过渡动画。然而在使用finishAfterTransition()之前如果不定义过渡动画,它的作用就与finish()没有区别。

onBackPressed()的重写

 在onBackPressed()方法的重写内容中,一定要在最后调用结束Activity的方法,最常用的就是finish(),否则,由于重写内容覆盖了原定义内容,系统再调用此方法时就不会产生Back动作。通俗的讲就是用户按Back键不起作用。

@Override
public void onBackPressed() {
    ...
    //must call a method to end Activity behind all statement
    finish();  
}

 或者

@Override
public void onBackPressed() {
    ...
    //must call a method to end Activity behind all statement
    super.onBackPressed();
}

 在内容的最后使用super.onBackPressed()调用原定义。

重写onBackPressed()的完整代码

MainActivity.java

public class MainActivity extends Activity
                       implements View.OnClickListener {
                       
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //load activity_main.xml
        setContentView(R.layout.activity_main);
        
        Button btn_1=(Button)findviewById(R.id.btn_1);
        btn_1.setOnClickListener(this);
    }
    
    @Override
    public void onClick(View v) {
        onBackPressed();
    }
    
    @Override
    public void onBackPressed() {
        Intent intent=new Intent();
        intent.putExtra("hello","HelloWorld");
        //return data from current Activity
        setResult(0,intent);
        super.onBackPressed();
    }
}

欢迎指正
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章