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