2012-07-24 69 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