Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android開發步步為營之22:處理Activity中的back按鈕事件

android開發步步為營之22:處理Activity中的back按鈕事件

編輯:關於Android編程

在手機應用中,用戶點擊回退按鈕一般是返回上個頁面,一般頁面不用處理,如果在首頁,點回退,沒任何提示,就把應用給關了,這個用戶體驗就不太好了,所以一般都會給用戶一個確認的提示:是否退出?免得用戶誤操作。
一、 Activity 中處理
@Override
public boolean onKeyDown( int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
Toast.makeText( this , "onkeydown" , Toast. LENGTH_SHORT ).show();
if (keyCode == KeyEvent. KEYCODE_BACK && event.getRepeatCount() == 0) {
Toast.makeText( this , "onbackkeydown" , Toast. LENGTH_SHORT ).show();

AlertDialog.Builder alertBuilder = new AlertDialog.Builder( this );
alertBuilder.setTitle( " 提示信息 " ).setMessage(R.string. menu_exit_desc )
.setCancelable( false ).setPositiveButton(R.string. ok ,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int id) {
AActivity. this .finish();
android.os.Process .killProcess(android.os.Process
.myPid());
}
}).setNegativeButton(R.string. cancel ,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int id) {
dialog.cancel();
}
});
return false ;

}

return super .onKeyDown(keyCode, event);
}

/*2.1開始有這個回退按鈕事件,也可以放在這裡處理
Called when the activity has detected the user's press of the back key.
The default implementation simply finishes the current activity,
but you can override this to do whatever you want.
*/
@Override
public void onBackPressed() {
// TODO Auto-generated method stub
AlertDialog.Builder alertBuilder = new AlertDialog.Builder(this);
alertBuilder.setTitle("提示信息").setMessage("確認退出嗎?")
.setCancelable(false).setPositiveButton("確定",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int id) {
MainActivity.this.finish();
android.os.Process
.killProcess(android.os.Process
.myPid());
}
}).setNegativeButton("取消",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int id) {
dialog.cancel();
}
});
alertBuilder.show();
}

二、 TabActivity 中處理
發現 TabActivity 中 OnKeyDown 時間沒有被監聽到,主要原因是當前 activity 的焦點放在了 tab 中的子 activity 中了,在 TabActivity 中得不到想要的焦點,所以按鍵操作並不起作用。
看了下 SDK 文檔,發現有一個 dispatchKeyEvent(KeyEvent event) ,可以通過監聽 event 操作,再判斷是哪一個按鍵來實現對應的按鍵操作,注意在 if 判斷中要加一個 event.getAction() == KeyEvent.ACTION_DOWN 判斷。
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
// TODO Auto-generated method stub
Toast.makeText( this , "test1" , Toast. LENGTH_SHORT ).show();
if (event.getAction() == KeyEvent. ACTION_DOWN && event.getKeyCode() == KeyEvent. KEYCODE_BACK )
{
AlertDialog.Builder alertBuilder = new AlertDialog.Builder( this );
alertBuilder.setTitle( " 提示信息 " ).setMessage(R.string. menu_exit_desc )
.setCancelable( false ).setPositiveButton(R.string. ok ,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int id) {
HomeActivity. this .finish();
android.os.Process
.killProcess(android.os.Process
.myPid());
}
}).setNegativeButton(R.string. cancel ,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int id) {
dialog.cancel();
}
});
alertBuilder.show();
return false ;

}

return super .dispatchKeyEvent(event);
}
三、效果

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved