【问题标题】:android disabling a button does not workandroid禁用按钮不起作用
【发布时间】:2018-07-18 21:00:07
【问题描述】:

我正在尝试禁用 onsucceed() 方法上的按钮。但是我尝试了所有可能的选项,例如button.setVisibility()button.setEnabled(),但没有任何效果。根本原因可能是什么?

这是我的代码:

 if(device1notConnected) {
      scanneddevice1.setOnClickListener(new View.OnClickListener() {
         @Override
            public void onClick(final View v) {
                if(device1notConnected==false)
                     scanneddevice1.setClickable(false);

           device1.connect(new DeviceConnectCallback() {
              @Override
                 public void onSucceed(Device device1, DeviceConnectResult result) {
                                device1notConnected = false;
                                Log.d(TAG, "The connection is successful");
                                Toast.makeText(getApplicationContext(), "The connection is successful", Toast.LENGTH_SHORT).show();
                                // The connection is successful...
                            }

                            @Override
                            public void onError(Device device, DeviceCallbackException e) {
                                Log.d(TAG,"error");
                            }
                        });
                    }
                });
            }

【问题讨论】:

  • 也许这取决于谁是“DeviceConnectCallback()”的执行者。你有“connect()”方法的源代码吗?如果是:您必须检查它是否使用 Handler 或“runOnUiThread()”在 UiThread/MainThread 上执行“onSucceed()”回调,还是由内部 WorkerThread 完成(如果使用)。当您使用“button.setVisibility()”时,您是否检查过“onSucceed()”方法是否正确执行到其结束?因为我开始认为回调代码会生成一个异常,并且在到达您的 setVisibility() 之前它会提前结束...

标签: android android-button


【解决方案1】:

尝试在 onClick 方法中立即调用“setEnabled(false)”(完全删除 device1notConnected 布尔值和“if”检查)。在“onError”中调用“setEnabled(true)”,以便用户可以再试一次或其他什么。如果 onError 在后台线程上,则调用按钮上的 post 方法并提供一个执行 'setEnabled(true)' 的可运行对象

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-11
    • 1970-01-01
    相关资源
    最近更新 更多