重寫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();
    }
}

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