alertdialog
setView与setcontentView的区别
看下面一段代码:
alertdialog.builder builder = new AlertDialog.Builder(this);
builder.setView(R.layout.layout_updatedialog)
.settitle("更新")
.setpositivebutton("是", null)
.setNegativeButton("否", null)
.create();
AlertDialog alertDialog = builder.show();
View view = LayoutInflater.from(this).inflate(R.layout.layout_updatedialog, null);
Button btnUpdate = view.findViewById(R.id.btn_update);
btnUpdate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
toast.maketext(MainActivity.this, "更新", Toast.LENGTH_SHORT).show();
}
});
alertDialog.setContentView(view);
说明:最终setContentView的布局会覆盖alertDialog原先show的布局,通过源码可以得出以下结论:
* AlertDialog分为三个部分,标题,内容区,底部button按键区
* setView对应的是内容区
* setContentView对应的是整个窗体,并且必须在show之后调用才会起作用
AlertDialog继承于Dialog,setContentView为Dialog中的方法,setView为AlertDialog自己的方法,对于Dialog,setContentView()无论调用show()之前还是之后,都会起作用。自己也不是很理解。
AlertDialog的setPositiveButton点击不消失的处理办法
① 通过反射
② 重新设置PositiveButton的点击事件
现在只介绍第二种
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setView(view)
.setTitle("更新")
.setPositiveButton("是", null) // 先设置为null
.setNegativeButton("否", null)
.create();
final AlertDialog dialog = builder.show();
dialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "点击我是不会消失的", Toast.LENGTH_SHORT).show();
}
});
步骤:
1..setPositiveButton("是", null) // 先设置listener接口为null;
2. 获取到PositiveButton,重新设置点击事件,要使dialog消失,则需在onClick()中调用dialog.dismiss();
3. dialog必须show之后才能设置点击事件
相关阅读
package com.shenzhou.robot.custom.dialog; import android.app.Dialog; import android.content.Context; import android.vie