间歇性的Button.INVISIBLE导致android

时间:2015-09-29 20:20:57

标签: android button asynchronous visible

在我的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类

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上的文本但保持Buttons可见。他们似乎被禁用但仍然可见。如果我注释掉setText行,Buttons会正确反应,即消失。

我错过了一些明显的东西吗?

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

所有这些似乎与5秒超时后的屏幕重置不同。任何想法为什么会这样?

2 个答案:

答案 0 :(得分:1)

更改

 btnSignIn.setVisibility(Button.INVISIBLE);

btnSignIn.setVisibility(View.INVISIBLE);

答案 1 :(得分:0)

试试这个......

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);
        }
    }
}