【问题标题】:Show an AlertDialog when button is clicked单击按钮时显示 AlertDialog
【发布时间】:2013-05-11 20:13:17
【问题描述】:

我正在尝试查看带有单选按钮的对话框,但是当我单击按钮时,警报对话框从未出现。下面是代码。请让我知道是否有任何替代解决方案。此示例取自 API Demos。

public class MainPage extends Activity{
Button start;
private static final int DIALOG_SINGLE_CHOICE = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.mainpage);
    start = (Button) findViewById(R.id.start);
    start.setBackgroundResource(R.drawable.read);
    start.setOnClickListener(new View.OnClickListener() {
        @SuppressWarnings("deprecation")
        public void onClick(View v) {

            showDialog(DIALOG_SINGLE_CHOICE );

        }
    });

}

@Override
@Deprecated
protected Dialog onCreateDialog(int id) {
    id = DIALOG_SINGLE_CHOICE;
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("Choose your option");
    builder.setSingleChoiceItems(R.array.Baani, 0, new OnClickListener() {

        public void onClick(DialogInterface dialog, int which) {
            // TODO Auto-generated method stub

        }
    })
    .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {

                    /* User clicked Yes so do some stuff */
                }
            })
            .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {

                    /* User clicked No so do some stuff */
                }
            })
           .create();
    return super.onCreateDialog(id);
        }   
  }
}

【问题讨论】:

    标签: android radio-button dialog


    【解决方案1】:

    创建此函数并在单击事件中使用 showAskDialog() 函数

    private void showAskDialog() {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
                builder.setTitle("DialogTitle").setMessage("DialogMessage").setCancelable(true).setSingleChoiceItems(R.array.Baani, 0, new OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                      // TODO Auto-generated method stub
    
                    }
                    }).setNegativeButton("No", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
    
                        dialog.cancel();
                    }
                }).setPositiveButton("YES", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
    
                        dialog.cancel();
                    }
                });
        // before @TronicZomB advice
        //AlertDialog alert = builder.create();
        //alert.show();
        // after @TronicZomB advice
        builder.show();
    }
    

    【讨论】:

    • .create() 是不必要的。在 Builder 上调用 .show() 将创建它并在一行代码中显示它。使用.create() 的唯一原因是您可以在其他地方多次调用.show(),但在这种情况下不需要。
    【解决方案2】:

    您需要将return super.onCreateDialog(id); 替换为return builder.show();.create() 将从构建器创建一个警报对话框,但它不显示该对话框。 .show() 将从构建器创建对话框并将其显示在屏幕上。

    我也认为int id 可能是不必要的。您可以尝试以下代码,它应该适合您:

    public class MainPage extends Activity{
    Button start;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    super.onCreate(savedInstanceState);
    setContentView(R.layout.mainpage);
    start = (Button) findViewById(R.id.start);
    start.setBackgroundResource(R.drawable.read);
    start.setOnClickListener(new View.OnClickListener() {
        @SuppressWarnings("deprecation")
        public void onClick(View v) {
    
            showDialog(DIALOG_SINGLE_CHOICE );
    
        }
    });
    
    }
    
    @Override
    public Dialog onCreateDialog() {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Choose your option");
        builder.setSingleChoiceItems(R.array.Baani, 0, new OnClickListener() {
    
            public void onClick(DialogInterface dialog, int which) {
                // TODO Auto-generated method stub
    
            }
        })
        .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
    
                        /* User clicked Yes so do some stuff */
                    }
                })
                .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
    
                        /* User clicked No so do some stuff */
                    }
                });
            return builder.show();
            }   
      }
    }
    

    【讨论】:

      【解决方案3】:

      你在onCreateDialog()里面做错了。

      首先,您不应该执行id = DIALOG_SINGLE_COICE,而是测试id 值是否等于DIALOG_SINGLE_CHOICE。 * 如果是,则使用AlertDialog.Builder 创建Dialog 并返回builder.create()。 * 如果没有,返回super.onCreateDialog(id)

      但此方法已弃用,您应该改用DialogFragment

      【讨论】:

      • .create() 不会显示对话框。您需要在“* If yes...”中返回builder.show()
      【解决方案4】:
      public class MainActivity extends Activity implements OnClickListener{
      private Button button;
      private static final int DIALOG_SINGLE_CHOICE = 1;
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
          button  = (Button) findViewById(R.id.button);
          button.setOnClickListener(this);
      }
      
      @Override
      public boolean onCreateOptionsMenu(Menu menu) {
          // Inflate the menu; this adds items to the action bar if it is present.
          getMenuInflater().inflate(R.menu.activity_main, menu);
          return true;
      }
      
      @Override
      public void onClick(View v) {
          switch (v.getId()) {
          case R.id.button:
              showDialog(DIALOG_SINGLE_CHOICE);
              break;
      
          default:
              break;
          }
      }
      
      @Override
      @Deprecated
      protected Dialog onCreateDialog(int id) {
          AlertDialog.Builder builder = new AlertDialog.Builder(this);
          builder.setTitle("Choose your option");
          builder.setSingleChoiceItems(R.array.Baani, 0, new DialogInterface.OnClickListener() {
              public void onClick(DialogInterface dialog, int which) {
                  // TODO Auto-generated method stub
              }
      
          }).setPositiveButton("OK", new DialogInterface.OnClickListener() {
              public void onClick(DialogInterface dialog, int whichButton) {
      
                  /* User clicked Yes so do some stuff */
              }
          }).setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
              public void onClick(DialogInterface dialog, int whichButton) {
      
                  /* User clicked No so do some stuff */
              }
          }).create().show();
          return super.onCreateDialog(id);
      }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-14
        • 1970-01-01
        • 2021-04-07
        • 1970-01-01
        相关资源
        最近更新 更多