1
//About Button in the principal menu       
final Button button3 = (Button) findViewById(R.id.button3);

button3.setOnClickListener(
    new OnClickListener() {

    public void onClick(View v) {                
        //set up dialog
        Dialog dialog = new Dialog(MainMenu.this);
        dialog.setContentView(R.layout.maindialog);
        dialog.setTitle("About");
        dialog.setCancelable(true);

        //now that the dialog is set up, it's time to show it    
        dialog.show();

        Button closeButton = (Button) dialog.findViewById(R.id.Button01);
//      closeButton.setOnClickListener(new Button.OnClickListener() { 
//          public void onClick(View view) { 
//              dialog.dismiss();
//          }
//      });

        if(v==closeButton)
            dialog.dismiss();
    }
});

私はこのコードを持っていますが、却下が機能していません。

「about」ボタンがあり、クリックするとダイアログウィンドウが表示されます。次に、ダイアログウィンドウに「OK」ボタンがあり、このOKボタンでダイアログを閉じる必要がありますが、閉じられません。理由を教えていただけませんか??

4

3 に答える 3

7

まず、Dialog がクラスのスコープ内にある必要があるため、宣言する必要があります。

public Dialog dialog;

メソッドの外。次に、onCreate()メソッドで、既にあるようにダイアログを作成します。OnClickListeners への呼び出しshow()と呼び出しだけを残します。dismiss()

ボタンは次のようになります。

Button button3 = (Button) findViewById(R.id.button3);
button3.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        dialog.show();
    }
});

Button closeButton = (Button) dialog.findViewById(R.id.Button01);
closeButton.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        dialog.dismiss();
    }
});

また、リソース名を無作為に大文字にしたり大文字にしなかったりするのではなく、自分に合った命名規則を考え出すことをお勧めします (たとえば、Button03 と button1 など)。

于 2011-06-20T01:53:10.240 に答える
1

の外側でダイアログを初期化しOnClickListenerます。

Dialog dialog = new Dialog(MainMenu.this);
dialog.setContentView(R.layout.maindialog);

button3.setOnClickListener(new OnClickListener() {           
       public void onClick(View v) {              
         dialog.show();    
       }
});

Button closeButton = (Button) dialog.findViewById(R.id.Button01);
closeButton.setOnClickListener(new OnClickListener() {
       public void onClick(View v) {
          dialog.dismiss();
       }
});
于 2016-03-14T06:32:10.903 に答える
1

このように、両方のボタンに共通の onClick を記述することもできます。これにより、ボタンごとの onClick イベントの書き換えが回避され、メンテナンスが容易になります。

public void onClick(View v) {

   switch(v.getId())
   {
       case R.id.button3:
           dialog.show();

       case R.id.Button01:
           dialog.dismiss();
   }


}
于 2011-06-20T02:38:44.090 に答える