3

キャンセル ボタンを押すと、キャンセルのトーストと却下のトーストが表示されます。どうすればこれを解決できますか?. ありがとう。

編集:キャンセルボタンを押すとトーストが必要になり、ProgressDialogが正しく終了したとき(閉じるとき)に別のトーストが必要になります。しかし、現在、ProgressDialog が正しく終了すると正しい Toast が表示されますが、Cancel ボタンを押すと結果は両方とも Toast になります。(これは、完了するために5ずつ増加するバーを持つProgressDialogです)。私の英語で申し訳ありません:S

myPd_bar.setOnCancelListener(new OnCancelListener(){

                public void onCancel(DialogInterface dialog) {
                    // TODO Auto-generated method stub
                    Toast.makeText(MainActivity.this,"Cancelled.",
                            Toast.LENGTH_LONG).show();

                }});

            myPd_bar.setOnDismissListener(new OnDismissListener() {

                public void onDismiss(DialogInterface arg0) {
                    // TODO Auto-generated method stub
                    Toast.makeText(getApplicationContext(), "Done.",
                            Toast.LENGTH_SHORT).show();
                }
            });
            myPd_bar.setButton("Cancel", new DialogInterface.OnClickListener() 
            {
                public void onClick(DialogInterface dialog, int which) 
                { 
                    myPd_bar.cancel();
                }
            });

            myPd_bar.show();

EDIT2:最終的な解決策:

private int sw = 0;

myPd_bar.setOnDismissListener(new OnDismissListener() {

                    public void onDismiss(DialogInterface arg0) {

                        if (sw==0){
                        Toast.makeText(getApplicationContext(), "Envio Realizado Correctamente.",
                                Toast.LENGTH_SHORT).show();
                        }
                        myPd_bar.dismiss();
                            sw=0;
                        }
                });


                //Botón Cancelar.
                myPd_bar.setButton("Cancelar", new DialogInterface.OnClickListener() 
                {
                    public void onClick(DialogInterface dialog, int which) 
                    { 
                        sw = 1;
                        //Mostramos el mensaje al cancelar.
                        Toast.makeText(MainActivity.this,"Envío Cancelado.", Toast.LENGTH_LONG).show();
                        myPd_bar.cancel();
                    }
                });

                myPd_bar.show();
4

2 に答える 2

2

ドキュメンテーション:

public void cancel ()

ダイアログをキャンセルします。これは本質的に、dismiss() を呼び出すのと同じですが、DialogInterface.OnCancelListener (登録されている場合) も呼び出します。

両方を表示したくない場合は、 を使用してdismiss()ください。キャンセルすると、まずダイアログが閉じられ、次にダイアログがキャンセルされます。これにより、両方のリスナーが起動します。cancel()それ自体をオーバーライドして独自のメソッドを実装する場合を除き、これを回避する方法はありません。ただし、そうする正当な理由がわかりません。

また、私はエゴールのコメントに賛成です。本当に「練習のために」それを行う必要がある場合は、何をしようとしているのかを正確に説明してください。

編集:以下のコメントから、リスナーをまったく使用しないことをお勧めします。閉じる/キャンセルするときにトーストを表示するだけでよい場合は、トーストを直接作成してください。

myPd_bar.setButton("Cancel", new DialogInterface.OnClickListener() 
{
    public void onClick(DialogInterface dialog, int which) 
    { 
        Toast.makeText(MainActivity.this,"Cancelled.", Toast.LENGTH_LONG).show();
        myPd_bar.cancel();
    }
});

void dismissDialog(Context myContext)
{
    Toast.makeText(myContext, "Done.", Toast.LENGTH_SHORT).show();
    myPd_bar.dismiss();
}
于 2012-11-07T15:21:41.730 に答える
0

電話をかける前に

myPd_bar.show();

これを行う、

myPd_bar.setCancelable(true);

詳細: http://developer.android.com/reference/android/app/Dialog.html#setCancelable(boolean )

于 2012-11-07T15:21:32.640 に答える