Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 嵌套onclick侦听器_Android_Android Alertdialog - Fatal编程技术网

Android 嵌套onclick侦听器

Android 嵌套onclick侦听器,android,android-alertdialog,Android,Android Alertdialog,我正在编写一个程序,显示一系列按钮,每个按钮代表某个城市的不同景点。单击按钮后,一个对话框将向用户显示两个选项,“更多信息”和“映射信息”。点击“更多信息”按钮将引导用户访问景点的网站,“地图”按钮将显示一个带有景点谷歌地图的页面 我的问题是,每当单击景点的按钮时,我都需要生成一个包含两个按钮的AlertDialogBox,这两个按钮都有自己的OnClickListener。当我尝试在AlertDialogBox上创建两个按钮时,就会出现问题。我得到一个错误,无法创建按钮 在另一个程序中,我尝试

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

我的问题是,每当单击景点的按钮时,我都需要生成一个包含两个按钮的AlertDialogBox,这两个按钮都有自己的OnClickListener。当我尝试在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(); 
    }
});

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

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

您也可以使用
setNegativeButton(CharSequence text,DialogInterface.OnClickListener listener)
将CharSequence(字符串是CharSequence,您可以传递一个)作为参数(文本)显示在按钮上,如:
“更多信息”
“映射它”

另外,您可以使用
v.getContext()
来代替
getApplicationContext()

尝试以下方法:

    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();

        }
    });

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

  • 按钮文本:可以是
    字符串
    (即“Hello”)或
    字符串
    中的
    strings.xml
    文件中定义的资源(即R.string.hello)
    res/values
    文件夹

  • 其次,必须是一个用于侦听的
    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();
    

  • 有关
    AlertDialog.Builder
    方法的更多详细信息,请参阅此处的参考文档

    是否可以包含错误消息?