Android设置元素asynctask的可见性

时间:2014-07-31 03:10:06

标签: android android-layout android-asynctask visibility

我正在尝试在运行asynctask时设置两个线性布局的可见性。这是我的代码:

private LinearLayout mProgress;
private LinearLayout mList;
mProgress.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() {

            @Override
            public void onSystemUiVisibilityChange(int visibility) {
                mList.setVisibility((mProgress.getVisibility() == View.VISIBLE ? View.INVISIBLE : View.VISIBLE));               
            }
        });


//When I run asynctask
@Override
protected void onPreExecute() {
    super.onPreExecute();
    mProgress.setVisibility(View.VISIBLE);
}

@Override
protected void onPostExecute() {                
        mProgress.setVisibility(View.GONE);
}

通过权限,这应该将mProgress设置为一直可见,直到onPostExecute。从那里,我将可见性设置为GONE,这应该使我的其他线性布局可见?但是,当我运行它时,mProgress永远不会从onPreExecute设置为VISIBLE,并且当Visibility更改时,mList永远不会设置为VISIBLE。知道我做错了什么吗?

2 个答案:

答案 0 :(得分:0)

你的事情太复杂了。直接在onPostExecute和onPreExecute中设置列表的可见性 - 它更容易理解,对维护者更容易看到。

但是你写的代码的问题是在设置新的可见性之前调用onSystemUiVisibilityChange,而不是之后。所以你不应该使用mProgress.getVisibility,你应该使用传入的可见性变量。

答案 1 :(得分:0)

可能你使用了错误的Listener,文档说当状态栏因为调用setSystemUiVisibility(int)而改变可见性时,将调用onSystemUiVisibilityChange()。见http://developer.android.com/reference/android/view/View.OnSystemUiVisibilityChangeListener.html

您最好先确保使用正确的侦听器,然后确保在回调侦听器之前执行onPreExecute()和onPostExecute()方法。