我有一个需求,需要显示一个特定设置的复选框。当用户点击复选框时,我想要显示警示对话框。只有当用户点击确认按钮(或类似按钮)后,复选框才能改变。
我的意思是,OnCheckedChanged
监听器仅在复选框状态发生变化后才会触发,而我想在其更改状态之前监听点击事件。
我有一个需求,需要显示一个特定设置的复选框。当用户点击复选框时,我想要显示警示对话框。只有当用户点击确认按钮(或类似按钮)后,复选框才能改变。
我的意思是,OnCheckedChanged
监听器仅在复选框状态发生变化后才会触发,而我想在其更改状态之前监听点击事件。
您可以使用onTouchListener
并拦截ACTION_DOWN
事件来显示警报。
当用户选择更改您的复选框的选中状态时,可以通过编程方式实现。
示例:
checkbox.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_DOWN){
//show alert
return true; //this will prevent checkbox from changing state
}
return false;
}
});
当用户选择“是”或“否”时,请调用checkbox.setChecked(true);
或checkbox.setChecked(false);
。
ACTION_UP
,以防用户在按下复选框后拖动手指并在抬起之前离开。大多数系统组件都是这样工作的。 - tir38checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// TODO Auto-generated method stub
if(isChecked==true){
//Show your alert
}
}else if(isChecked==false){
//Show your alert
}
}
});
OnCheckChangeListener
,UI 将在其被调用之前更新。因此,即使我立即通过调用 setChecked(false)
撤消点击,屏幕上仍会出现一个小的 "闪烁",因为复选框已更改。 - tir38checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
{
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
if ( isChecked )
{
// do anything
// perform logic
}
}
});
onClickListener
并相应地设置复选框的 checked
状态。 myCheckBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// createYourDialog
// onPositiveButtonClicked
myCheckBox.setChecked(true);
// onNegativeButtonClicked
myCheckBox.setChecked(false);
// yourDialog.show();
}
});
OnClickListener
,UI 将在此之前更新。因此,即使我立即通过调用 setChecked(false)
撤销了点击,屏幕上仍会出现一个小的“闪烁”,因为复选框状态会快速改变。 - tir38