间歇性 Button.INVISIBLE 结果 android

intermittent Button.INVISIBLE results in android

在我的 UI 线程中,我有以下完美运行的代码

public void showButtons(boolean visible) {
    if (visible) {
        mTextView.setText(currentSwipe.cardID);
        btnSignIn.setVisibility(Button.VISIBLE);
        btnSignOut.setVisibility(Button.VISIBLE);
    }
    else {
        mTextView.setText(R.string.Please_swipe);
        btnSignIn.setVisibility(Button.INVISIBLE);
        btnSignOut.setVisibility(Button.INVISIBLE);
    }
}

我也有这个 Async class

private class AwaitResponse extends  AsyncTask<clockItem, Void, Boolean>{
    protected Boolean doInBackground(clockItem... params){
        clockItem rSwipe = (clockItem)params[0];
        Calendar cSwipe = rSwipe.swipeDate;
        SystemClock.sleep(5000);
        if (currentSwipe.swipeDate == cSwipe)
        {
            currentSwipeSave();
            return true;
        }
        return false;
    }

    protected void onPostExecute(Boolean SwipeActive){
        if (SwipeActive) {
            btnSignIn.setVisibility(Button.INVISIBLE);
            btnSignOut.setVisibility(Button.INVISIBLE);
            mTextView.setText(R.string.Please_swipe);
        }
    }
}

在 onPostExecute 中,我尝试调用 showButtons(false),它与此代码具有相同的结果,即更改 mTextView 上的文本但使按钮保持可见。它们似乎被禁用但仍然可见。如果我注释掉 setText 行,按钮会正确反应,即消失。

我是不是漏掉了什么明显的东西?

想法是一旦读取了 nfc 滑动,就会向用户显示 2 个按钮。如果在 5 秒后没有按下任何按钮,则会针对滑动提交不确定的方向。如果按下一个按钮,则会提交适当的方向,并且屏幕会重置(隐藏按钮并显示默认文本),为下一次滑动做好准备。如果记录了一次滑动,没有按任何按钮,在5秒内进行了新的滑动,之前的滑动是不确定方向的文件,并显示新的滑动选项。

除了 5 秒超时后屏幕重置之外,所有这些似乎都有效。知道这是为什么吗?

改变

 btnSignIn.setVisibility(Button.INVISIBLE);

btnSignIn.setVisibility(View.INVISIBLE);

试试这个...

public void showButtons(boolean visible) {
    if (visible) {
        mTextView.setText(currentSwipe.cardID);
        btnSignIn.setVisibility(View.VISIBLE);
        btnSignOut.setVisibility(View.VISIBLE);
    }
    else {
        mTextView.setText(R.string.Please_swipe);
        btnSignIn.setVisibility(View.INVISIBLE);
        btnSignOut.setVisibility(View.INVISIBLE);
    }
}

private class AwaitResponse extends  AsyncTask<clockItem, Void, Boolean>{
    protected Boolean doInBackground(clockItem... params){
        clockItem rSwipe = (clockItem)params[0];
        Calendar cSwipe = rSwipe.swipeDate;
        SystemClock.sleep(5000);
        if (currentSwipe.swipeDate == cSwipe)
        {
            currentSwipeSave();
            return true;
        }
        return false;
    }

    protected void onPostExecute(Boolean SwipeActive){
        if (SwipeActive) {
            showButtons(!SwipeActive);
        }
    }
}