我正在尝试在运行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。知道我做错了什么吗?
答案 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()方法。