我有一个可以选中或取消选中的复选框。当选中该复选框并且用户单击它时,我想显示一个AlertDialog而不取消选中该复选框(因为当您单击该复选框时,它将取消选中,因为它只是跟随状态更改)。在AlertDialog中,我想询问用户是否真的要取消选中它,然后才设置复选框未选中。
我没有提供更多代码,因为没有必要。我需要指导。
cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
if (isChecked) {
} else {
}
}
});
根据文档,请不要添加任何在if (isChecked) {}
块中添加对话框的解决方案:
具有两种状态的按钮,已选中且未选中。当按钮是 按下或单击,状态会自动更改。
这意味着监听器在复选框状态改变之后运行,因此显示对话框为时已晚。
答案 0 :(得分:1)
您应该创建一个自定义复选框并覆盖它的切换方法,以便根据状态执行任何操作。以下是一些示例功能的基本代码:
在xml中,按如下方式声明自定义视图(更改包名称):
<com.example.mike.myapplication.CustomCheckBox
android:id="@+id/my_checkbox"
android:text="@string/hello_world"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
然后在Activity / fragment中初始化它:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
cb = (CustomCheckBox) findViewById(R.id.my_checkbox);
// You should ALWAYS add this listener!!!!
cb.addListener(new CustomCheckedChangeListener() {
@Override
public void onConfirmCheckDisable() {
buildDialog();
}
});
}
private void buildDialog() {
new AlertDialog.Builder(this)
.setTitle("Confirm")
.setMessage("Are you sure you want to uncheck this entry?")
.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
cb.setChecked(false);
}
})
.setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// do nothing
}
})
.setIcon(android.R.drawable.ic_dialog_alert)
.show();
}
这是您的自定义复选框类:
public class CustomCheckBox extends CheckBox {
private CustomCheckedChangeListener mListener;
public CustomCheckBox(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomCheckBox(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public CustomCheckBox(Context context) {
super(context);
}
public void addListener(CustomCheckedChangeListener list){
mListener = list;
}
@Override
public void toggle() {
if (mListener == null) return;
if (isChecked()) {
mListener.onConfirmCheckDisable();
} else {
super.toggle();
}
}
}
这是你的倾听者:
public interface CustomCheckedChangeListener {
public void onConfirmCheckDisable();
}
这有帮助吗?
答案 1 :(得分:1)
这应该可行(但是请注意这里的上下文,如果你在片段调用getActivity()中):
cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
if (isChecked) {
AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext());
builder.setMessage("Are you sure you want to uncheck this ?")
.setPositiveButton("Yes", new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int id){
buttonView.setChecked(false);
}
}).setNegaviteButton("Cancel", new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int id){
buttonView.setChecked(true);
}
});
AlertDialog alertDialog = builder.create();
alertDialog.show();
}
}
});
答案 2 :(得分:0)
您只需创建一个AlertDialog,看看
cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
if (isChecked) {
confirmCheck();
}
}
});
private void confirmCheck() {
new AlertDialog.Builder(this)
.setIcon(android.R.drawable.ic_dialog_alert)
.setTitle("WARNING!")
.setMessage("¿Sure u check?")
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which){
cb.setChecked(false);
}
})
.setNegativeButton("No", null)
.show();
}
我希望我能帮助你,问候。