java - 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)'
解决方案
如果btnYes
和btnNo
在对话框上,那么您应该使用Viewinitialize
这些按钮。AlertDialog's
object
您必须修改您的代码,如下所示。
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();
}
});
}
});
}
}
希望它可以帮助你。
推荐阅读
- laravel - 使用 where 约束区分 Laravel 中多条路线的最佳方法是什么?
- python - 如何避免 Django 的 `|linebreaksbr` 和 Bootstrap 风格冲突?
- php - 组合数据类型以传递给@include
- regex - 如何删除 \ 除非后跟“?
- python-3.x - 如何从数据集中删除图像及其标签
- ruby-on-rails - 在单个 POST HTTP 请求中发送一组不同的哈希值
- java - 返回泛型类型时出现 ClassCastException
- wordpress - Nginx 位置指令中子目录的正则表达式或通配符
- kubernetes - 同一个集群中的不同入口被绑定到不同的地址
- excel - 电子表格::ParseExcel::SaveParser 问题 - 无法获取定义的工作簿对象