setVisibility()未刷新活动布局

时间:2012-11-26 08:54:46

标签: android visibility android-theme android-holo-everywhere

我在微调器选项上将按钮的可见性设置为VISIBLE或GONE: -

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

        });

这里的问题是我的视图在此操作后没有刷新,但是当我在页面上选择一个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;
    }
}

但这也不起作用

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

1 个答案:

答案 0 :(得分:4)

我遇到了同样的问题。来自holoeverywhere的微调器类在调用onItemSelected之后更新其图形。因此它“覆盖”了您的布局更新。我发现的唯一解决方案是设置一个处理程序来更新ui,将来会被判1秒钟。 像这样:

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