我在应用程序中使用一个复选框作为按钮来打开或关闭某些功能。但是 Action (从网络加载文件)是在异步任务中完成的,所以我不希望在异步任务成功完成之前进行检查,就像这样

protected void onPostExecute(String result) {

            if(result==null) {
                return;
            }
            // loaded ok, turn on check mark
            MainActivity.mMp3Cb.setChecked(true);

问题是,setChecked(true)导致OnCheckedChangeListener再次触发,就好像是用户输入的一样

有办法避免这种情况吗?或者至少在onCheckedChanged中检测到它?

谢谢

最佳答案

您可以使用按钮 View 对象的isPressed()方法。这是Android中切换按钮的示例。 buttonView.isPressed()仅在用户单击按钮时才为true。

@Override
public synchronized void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

    if (buttonView.isPressed()) {
        // human input
    } else {
        // result of setChecked(boolean)
    }
}

关于android CheckBox如何区分用户单击和setChecked,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15803733/

10-11 03:11