需求:点击CheckBox弹出对话窗,点击“是”,改变CheckBox选择状态,点击否不改变
问题:出现要点击两次否才行
cbPickAbnormal.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
AlertDialog alertDialog2 = new AlertDialog.Builder(PickActivity.this)
.setMessage("是否改变异常状态")
.setPositiveButton("是",(dialogInterface,i)-> {//添加"Yes"按钮
if(isChecked){
updatePickStatus(etBatchNum.getText().toString(),orderPickList.get(choiceItem[0]).getTradeNID().toString(),
orderPickList.get(choiceItem[0]).getSku(),2);
}else {
updatePickStatus(etBatchNum.getText().toString(),orderPickList.get(choiceItem[0]).getTradeNID().toString(),
orderPickList.get(choiceItem[0]).getSku(),0);
}
})
.setNegativeButton("否", (dialogInterface,i)-> {//添加取消
cbPickAbnormal.setChecked(false);
})
.create();
alertDialog2.show();
petHide.setText("");
petHide.requestFocus();
}
});
解决:不要用setOnCheckedChangeListener() ,改用了setOnClickListener()
原因:如果你代码中有根据数据设置checkbox选中状态,又同时监听了setOnCheckedChangeListener()方法,setChecked()时会触发此listener。
修改后的代码:
cbPickAbnormal.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog alertDialog2 = new AlertDialog.Builder(PickActivity.this)
.setMessage("是否改变异常状态")
.setPositiveButton("是",(dialogInterface,i)-> {//添加"Yes"按钮
if(cbPickAbnormal.isChecked()){
updatePickStatus(etBatchNum.getText().toString(),orderPickList.get(choiceItem[0]).getTradeNID().toString(),
orderPickList.get(choiceItem[0]).getSku(),2);
}else {
updatePickStatus(etBatchNum.getText().toString(),orderPickList.get(choiceItem[0]).getTradeNID().toString(),
orderPickList.get(choiceItem[0]).getSku(),0);
}
})
.setNegativeButton("否", (dialogInterface,i)-> {//添加取消
cbPickAbnormal.setChecked(!cbPickAbnormal.isChecked());
})
.create();
alertDialog2.show();
petHide.setText("");
petHide.requestFocus();
}
});
这个坑我已经踩烂了,希望对各位朋友有帮助吧!