首页 > 解决方案 > void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' 在一个空对象引用上

问题描述

我添加了一个按钮“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();

                  }
              });


            }
        });
    }
}

尝试在 com.example.customdialog.MainActivity$1.onClick(MainActivity.java:33) 的空对象引用上调用虚拟方法 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)'

标签: javaandroidusing

解决方案


如果btnYesbtnNo在对话框上,那么您应该使用Viewinitialize这些按钮。AlertDialog'sobject

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

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

                  }
              });


            }
        });
    }
}

希望它可以帮助你。


推荐阅读