1

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

事情是这样的:我创建了一个带有 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 中创建此对话框。

也许Android不喜欢盗梦空间......

知道如何解决这个问题吗?

4

3 回答 3

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();
}
于 2012-07-24T07:48:21.927 回答
1

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

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(); 
于 2012-07-24T07:41:09.837 回答
0

查看是否要取消或关闭对话框(后按),您可以将对话框设置为可取消的 true。例如:

// it will not allow to cancel on back press
dlgAlert.setCancelable(false);
于 2012-07-24T07:42:35.860 回答