setVisibility() 不刷新活动布局

Yog*_*ari 0 android visibility android-theme android-holo-everywhere

我在微调项目选择时将按钮的可见性设置为可见或消失:-

selectUserTypeSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view,
                    int position, long id) {
                FilterUserType newUserType = FilterUserType.get(position);
                if(filter.userType != newUserType){
                    filter.userType = newUserType;
                    ScrollView mainScrollView =  (ScrollView) findViewById(R.id.mainLayout);
                    switch (newUserType) {
                    case AnyUser:
                    case CurrentUser:{
                        selectUserBtn.setVisibility(View.GONE);
                        break;
                    }
                    case SpecificUser:{
                        selectUserBtn.setVisibility(View.VISIBLE);
                        break;
                    }
                    default:
                        break;
                    }
                }
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {}

        });
Run Code Online (Sandbox Code Playgroud)

这里的问题是我的视图在此操作后没有刷新,但是当我在页面上选择一个 EditText 并且键盘已启动时......当时它会刷新并显示所需的行为。

我曾尝试将 switch-case 编辑为:-

switch (newUserType) {
    case AnyUser:
    case CurrentUser:{
        selectUserBtn.setVisibility(View.GONE);
        mainScrollView.invalidate();
        break;
    }
    case SpecificUser:{
        selectUserBtn.setVisibility(View.VISIBLE);
        mainScrollView.invalidate();
        break;
    }
    default:
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

但这也不起作用

仅供参考,我HoloEverywhere在我的项目中使用了主题,这个微调器来自 HoloEverywhere 小部件。

小智 6

我有同样的问题。调用 onItemSelected 后,holoeverywhere 的微调器类更新其图形。所以它“覆盖”了你的布局更新。我找到的唯一解决方案是设置一个处理程序来更新 ui,以便在未来 1 秒内执行。像这样:

Handler han = new Handler();
        han.postAtTime(new Runnable() {
            @Override
            public void run() {
                // UPDATE UI HERE
            }
        }, 1000);
Run Code Online (Sandbox Code Playgroud)