Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.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
Java void android.widget.Button.setOnClickListener(android.view.view$OnClickListener)和#x27;关于空对象referec_Java_Android_Using - Fatal编程技术网

Java void android.widget.Button.setOnClickListener(android.view.view$OnClickListener)和#x27;关于空对象referec

Java void android.widget.Button.setOnClickListener(android.view.view$OnClickListener)和#x27;关于空对象referec,java,android,using,Java,Android,Using,我添加了一个按钮“btn”。我已经设置了onclicklistener,在按钮“btn”中我添加了另一个按钮“btnYes”,以在添加这些“btnYes”应用程序时显示自定义对话框 当我删除“btnyes”按钮时,应用程序正在工作。 我们可以为不同的工作在一个按钮内添加两个按钮的onclicklistener吗 Java代码 public class MainActivity extends AppCompatActivity { private Button btn, btnYes,

我添加了一个按钮“btn”。我已经设置了onclicklistener,在按钮“btn”中我添加了另一个按钮“btnYes”,以在添加这些“btnYes”应用程序时显示自定义对话框

当我删除“btnyes”按钮时,应用程序正在工作。 我们可以为不同的工作在一个按钮内添加两个按钮的onclicklistener吗

Java代码

public class MainActivity extends AppCompatActivity {
    private Button btn, btnYes, btnNo;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btn = findViewById(R.id.click);
        btnYes = findViewById(R.id.yes);
        btnNo = findViewById(R.id.no);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                AlertDialog.Builder dialogBox = new AlertDialog.Builder(MainActivity.this);
                LayoutInflater inflater = LayoutInflater.from(MainActivity.this);

                View myView = inflater.inflate(R.layout.custom_dialogbox, null);
                dialogBox.setView(myView);
                final AlertDialog mybuilder = dialogBox.create();
                mybuilder.setCancelable(false);
              btnYes.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View v) {
                      mybuilder.dismiss();

                  }
              });


            }
        });
    }
}
尝试在空对象引用上调用虚拟方法“void android.widget.Button.setOnClickListener(android.view.view$OnClickListener)” 位于com.example.customdialog.MainActivity$1.onClick(MainActivity.java:33)


如果对话框上有
btnYes
btnNo
,则应使用
AlertDialog的
视图
对象
初始化这些按钮

您必须修改代码,如下所示

public class MainActivity extends AppCompatActivity {
    private Button btn, btnYes, btnNo;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btn = findViewById(R.id.click);

        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                AlertDialog.Builder dialogBox = new AlertDialog.Builder(MainActivity.this);
                LayoutInflater inflater = LayoutInflater.from(MainActivity.this);

                View myView = inflater.inflate(R.layout.custom_dialogbox, null);

                // these button should be initialize here.
                 btnYes = myView.findViewById(R.id.yes);
                 btnNo = myView.findViewById(R.id.no);

                dialogBox.setView(myView);
                final AlertDialog mybuilder = dialogBox.create();
                mybuilder.setCancelable(false);
              btnYes.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View v) {
                      mybuilder.dismiss();

                  }
              });


            }
        });
    }
}

希望它能帮助您。

如果您想显示带有“是”或“否”选项的对话框,请使用此选项

AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage(message)
                .setCancelable(false)
                .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {

                        // action for yes

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

                        // action for no

                    }
                });
        AlertDialog alert = builder.create();
        alert.show();
但是,如果您想使用自定义对话框布局,您应该这样做

final Dialog dialog = new Dialog(this);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialog.setContentView(R.layout.YOUR_LAYOUT_HERE);
        Button btnyes= dialog.findViewById(R.id.btnyes);

btnyes.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dialog.cancel();
            }
        });

您的
btnYes
btnNo
按钮是在您的主要活动上还是在对话框上?如果它们在对话框中,则不应使用
MainActivity
findViewById
方法初始化它们,因为它们不存在,因此引用将为
null
。相反,在外部侦听器中对
AlertDialog
View
对象进行膨胀后,调用
findViewById