2012-07-24 52 views
1

我一直在努力让它工作几个小时,但我找不到任何合适的解决方案。AlertDialog OnCLickListener需要后退按钮才能激活

下面是这个事情:我创建了一个带有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不喜欢以前...

任何想法如何解决这个问题?

回答

1

使用简单的内部类,并检查是否正常工作......在“这个”乌尔传递活动场景..

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(); 
+0

事实上,这是我尝试的第一个代码,但没有工作(它做相同的,但我也没多想按后退键)。 所以我试图拿出听众,以防万一... – viki53 2012-07-24 07:58:31

+0

我试过你的代码,_just在case_中,但结果是完全一样的:我仍然要按Back _“button”_... – viki53 2012-07-24 08:06:41

0

看看是否要取消或关闭对话框(背衬)可以使对话作为一个可靠的真实。 e.g:

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

我尝试了错误和真实,但它也是这样做的:我必须至少按一次按钮才能够做某件事(再按一次“退回”以解除或按下按钮) 这种行为有点怪异... – viki53 2012-07-24 08:00:43

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(); 
} 
+0

我认为这应该显示一个对话框,当我按下后退按钮,不是吗? 问题是,当我在Phonegap插件中出现错误时,显示对话框。但是我必须按下后退按钮才能点击AlertDialog的按钮。 没有它,OnClick事件不会被解雇... – viki53 2012-07-24 08:29:51