我添加了一个按钮“ 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)
答案 0 :(得分:2)
如果对话框中有btnYes
和btnNo
,则应使用initialize
视图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();
}
});
}
});
}
}
希望它对您有帮助。
答案 1 :(得分:1)
如果要显示“是”或“否”对话框,请使用
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();
}
});