1

私はそれを何時間も機能させようとしてきましたが、適切な解決策が見つかりません。

ここに問題があります: 2 つのボタンを持つ AlertDialog を作成し、それぞれに 1 つの OnClickListener を設定します。

問題は、アラートのボタンの 1 つを「クリック」できるようにするには、戻るボタンを押さなければならないことです。

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

ここに何か悪いところが見えますか?

/* ============= 編集 ============= */

わかりました、何が起こっているのか理解できたと思います。

実際、Dialog クラスを拡張する 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

単純な内部クラスを使用して、それが機能するかどうかを確認します...「これ」でアクティビティコンテキストを渡します..

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 に答える