2012-08-27 169 views
-1

我想使用移动设备上的后退按钮使对话框出现问我是否确定要退出?Android使用后退按钮

public void onBackPressed() { 
    // TODO Auto-generated method stub 

    AlertDialog.Builder dialog=new AlertDialog.Builder(MainActivity.this); 
    dialog.setTitle("Confirm"); 
    dialog.setMessage("Are you sure you want to exit?"); 
    return; 
} 



@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    EditText text=(EditText)findViewById(R.id.Text); 
    TextWatcher watch=new TextWatcher() { 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, 
       int after) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void afterTextChanged(Editable s) { 
      // TODO Auto-generated method stub 
      onBackPressed(); 
     } 
    }; 
    text.addTextChangedListener(watch); 
} 
+1

是什么你的问题? – fiddler

回答

2

因为我认为你的onBackPressed()是处理android后退键的覆盖方法。

只需将dialog.create().show()添加到您的onBackPressed();即可。

它会显示AlertDialog ..

而且从afterTextChanged(Editable s)否则删除onBackPressed();它将调用每次当用户试图在EditText输入一些字符..

更新:

还有一件事你的onBackPressed()应该是这样的,

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

AlertDialog.Builder dialog = new AlertDialog.Builder(TestActivity.this); 
dialog.setTitle("Confirm"); 
dialog.setMessage("Are you sure you want to exit?"); 
dialog.create().show(); 
} 

如果您没有更改。

+1

非常感谢你的工作;) – user1602896

+0

现在你可以接受答案,并提高你的声誉。 – user370305

0

使用此代码为返回键事件

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 
    onBackPressed(); 
    return true; 
    } 
return super.onKeyDown(keyCode, event); 
} 

这是警告对话框

private void onBackPressed() { 

    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context); 
    alertDialogBuilder.setTitle("Do you really want to exit?"); 
    alertDialogBuilder 
      .setMessage("Click yes to exit!") 
      .setCancelable(false) 
      .setPositiveButton("Yes",new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog,int id) { 
        // if this button is clicked, close 
        // current activity 
        ThisActivity.this.finish(); 
       } 
       }) 
      .setNegativeButton("No",new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog,int id) { 
        // if this button is clicked, just close 
        // the dialog box and do nothing 
        dialog.cancel(); 
       } 
      });    
      AlertDialog alertDialog = alertDialogBuilder.create(); 
      alertDialog.show(); 
} 
0

试试这个。

public boolean onKeyDown(int keyCode, KeyEvent event) 
{ 
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) 
    { 
     showDialogForCloseApplication(); 
     return true; 
    } 
    return super.onKeyDown(keyCode, event); 
} 

private void showDialogForCloseApplication() 
    { 
     try 
     { 
      AlertDialog.Builder builder = new AlertDialog.Builder(this); 
      builder.setTitle(getResources().getString(R.string.name)); 
      builder.setMessage("Are you sure you want to exit?") 
       .setCancelable(false) 
       .setPositiveButton("Yes", new DialogInterface.OnClickListener() 
       { 
        public void onClick(DialogInterface dialog, int id) 
        { 
         finish(); 
        } 
       }) 
       .setNegativeButton("No", new DialogInterface.OnClickListener() 
       { 
        public void onClick(DialogInterface dialog, int id) 
        { 
         dialog.cancel(); 
        } 
       }); 
      AlertDialog alert = builder.create(); 
      alert.show(); 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 
0

* 第一种方式: *尝试通过@Override onKeyDown方法在当前的活动:

第二种方式
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    // TODO Auto-generated method stub 
    if (keyCode == event.KEYCODE_BACK) { 
     showAlert("", "Do you really want to exit?"); 
    } 
    return super.onKeyDown(keyCode, event); 
} 

private void showAlert(final String title, final String msg) { 
    AlertDialog.Builder dialouge = new AlertDialog.Builder(CategoriesList.this); 
    dialouge.setMessage(msg); 
    dialouge.setPositiveButton(" Yes ", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface arg0, int arg1) { 
      CurrentActivity.this.finish(); 
     } 
    }); 
    dialouge.setNegativeButton(" No ", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface arg0, int arg1) { 
     } 
    }); 
    dialouge.show(); 
} 

通过@Override onBackPresed()

public void onBackPresed(){ 

    Log.d(TAG,"inside onBackPressed()"); 
     showAlert("", "Do you really want to exit?"); 
}