嵌套的OnClickListeners

时间:2013-11-26 21:26:05

标签: android android-alertdialog

我正在编写一个显示按钮列表的程序,每个按钮代表某个城市的不同景点。单击该按钮后,对话框应该向用户显示两个选项,“更多信息”和“映射它”。点击“更多信息”按钮将用户引导到景点的网站,“地图”按钮将显示一个带有景点谷歌地图的页面。

我的问题是,每当点击吸引力的按钮时,我需要生成一个带有两个按钮的AlertDialogBox,这两个按钮都有自己的OnClickListeners。当我尝试在AlertDialogBox上创建两个按钮时,会出现问题。我收到一个错误,无法创建按钮。

在另一个程序中,我尝试创建一个AlertDialogBox,它工作正常,所以我不确定是什么问题。我的代码在

之下
button.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
          new AlertDialog.Builder(getApplicationContext())
        .setTitle(name)
        .setIcon(R.drawable.ic_launcher)
        .setMessage("Get More Information")
        .setNegativeButton(1, new OnClickListener() {
           @Override
           public void onClick(DialogInterface dialog, int which) {
            )
            intent = new Intent(); 
           }
             })
             .create()
             .show(); 
    }
});

3 个答案:

答案 0 :(得分:0)

方法setNegativeButton(int textId, DialogInterface.OnClickListener listener)将文本 资源 ID作为参数。例如:R.string.my_stringR.string.app_name或其他。找不到资源,因此无法创建AlertDialog。

你可能想改变你的想法 setNegativeButton(int textId, DialogInterface.OnClickListener listener)致电

您也可以使用setNegativeButton(CharSequence text, DialogInterface.OnClickListener listener)将CharSequence(字符串是CharSequence,您可以传递一个)作为参数(文本)显示在按钮上,如:"More Info"或{{1} }。

此外,您可以使用"Map It"代替getApplicationContext()

答案 1 :(得分:0)

试试这个:

    Button btn = (Button) findViewById(R.id.btn);

    btn.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            AlertDialog.Builder builder = new AlertDialog.Builder(YourActivityName.this);
            .setTitle(name)
            .setIcon(R.drawable.ic_launcher)
            .setMessage("Get More Information")

            .setPositiveButton("Ok",new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    //do operations
                }
            })

            .setNegativeButton("Close",new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    dialog.cancel();
                }
            });

            AlertDialog alert = builder.create();
            alert.show();

        }
    });

答案 2 :(得分:0)

您没有正确实施.setNegativeButton()方法,理想情况下它应该有2个参数,

  1. 按钮文本:这可以是String(即“Hello”)或String resource(即R.string.hello)在strings.xml文件中定义的 res/values文件夹。

  2. 其次,必须是DialogInterface.onClickListener()才能听 单击对话框按钮,在其onClick中,您可以执行此操作 任务。

    理想的AlertDialog代码可能如下所示:

    AlertDialog.Builder builder = new AlertDialog.Builder()                 
    builder.setTitle("Hello World")
    builder.setMessage("India is incredible.")
    .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
    
        public void onClick(DialogInterface dialog, int id) {
        // Do something on Positive button click
        .
        .
        }
        })
    .setNegativeButton("No", new DialogInterface.OnClickListener() {
    
        public void onClick(DialogInterface dialog, int id) {
        // Do something on Negative button click
        .
        .
        }
      })
    .setOnKeyListener(new OnKeyListener() {
    
        @Override
        public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
           if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) {
              // Do Something on Back key press
              .
              .
           }
        return false;
       }
    }).create().show();
    
  3. 有关AlertDialog.Builder方法的详细信息,请参阅此处的参考文档http://developer.android.com/reference/android/app/AlertDialog.Builder.html