AlertDialog OnCLickListener需要按下后退按钮才能激活

时间:2012-07-24 07:34:06

标签: android

我一直试图让它工作几个小时,但我找不到合适的解决方案。

这就是:我用2个按钮创建一个AlertDialog,并在每个按钮上设置一个OnClickListener。

问题是我必须按后退按钮才能“点击”其中一个警报按钮。

Context myActivity = getContext();
OnClickListener posClickListener = new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int id) {
        Log.d("AlertBuilder", "positive button");
        dialog.cancel();
        dialog.dismiss();

        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=com.facebook.katana"));
        getContext().startActivity(intent);
    }
};
OnClickListener negClickListener = new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int id) {
        Log.d("AlertBuilder", "negative button");
        dialog.cancel();
        dialog.dismiss();
    }
};

AlertDialog.Builder builder = new AlertDialog.Builder(myActivity);
builder.setMessage("Impossible de lancer l'application Facebook.\r\nVeuillez vérifier que vous avez installé et mis à jour l'application Facebook.")
        .setCancelable(false)
        .setNegativeButton("Retour", negClickListener)
        .setPositiveButton("Télécharger", posClickListener);
AlertDialog alert = builder.create();
alert.show();

alert.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK)); // I tried this to simulate the back button action, but it doesn't work

你觉得这里有什么不好吗?

/ * =============编辑============= * /

好的,我想我已经知道发生了什么。

实际上我尝试在FbDialog中创建这个对话框,它扩展了Dialog类。

也许Android不喜欢Inception ......

如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

使用简单的内部类并检查它是否有效...在“this”传递ur活动上下文..

AlertDialog.Builder dialog = new AlertDialog.Builder(this); 
dialog.setMessage(message);   
dialog.setPositiveButton("TeleCharger", new DialogInterface.OnClickListener() 
{       
    public void onClick(DialogInterface dialog, int id) 
    {  
        //put positive code here
    }   
});    
dialog.setNegativeButton("Retour", new DialogInterface.OnClickListener() 
{        
    public void onClick(DialogInterface dialog, int which)
    {
        //put negative code here
    }     
});    
dialog.create().show(); 

答案 1 :(得分:1)

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK)
        showDialog(getApplicationContext());

    return true;
    // use this instead if you want to preserve onKeyDown() behavior
    // return super.onKeyDown(keyCode, event);
}
public void showDialog(Context mContext) {
    AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
    builder.setMessage("Impossible de lancer l'application Facebook.\r\nVeuillez vérifier que vous avez installé et mis à jour l'application Facebook.")
                .setCancelable(false)
                .setNegativeButton("Retour", negClickListener)
                .setPositiveButton("Télécharger", posClickListener);
    AlertDialog alert = builder.create();
    alert.show();
}

答案 2 :(得分:0)

查看是否要取消或关闭对话框(反压)可以将对话框设置为可以正确的对话框。 例如:

// it will not allow to cancel on back press
dlgAlert.setCancelable(false);