如何解决view.setVisibility在异步类中工作正常,但在其他方法中不工作
我想显示asyncTask类运行时以相对布局保存的进度条。最初,我使用了扩展类“ AsyncTaskRunner”,并且一切正常,但是当我想对异步使用单独的类时,“。setVisibility”未显示。我可以看到视图的可见性,并且代码可以正常工作,但是我无法在模拟器中观看任何内容。
这是我的代码。
“ AsyncTaskRunner”的首次尝试
private class AsyncTaskRunner extends AsyncTask<String,String,String> {
@Override
protected String doInBackground(String... params) {
try {
runOnUiThread(new Runnable() {
@Override
public void run() {
getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
RelativeLayout progressBar = findViewById(R.id.async_progress_bar);
progressBar.setVisibility(View.VISIBLE);
}
});
//.....
runOnUiThread(new Runnable() {
@Override
public void run() {
RelativeLayout progressBar = findViewById(R.id.async_progress_bar);
progressBar.setVisibility(View.INVISIBLE);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
Button showPlaces = findViewById(R.id.showPlaces);
showPlaces.setVisibility(View.VISIBLE);
}
});
} catch (Exception e) {
Log.v("ErrorAPP",e.toString());
e.printStackTrace();
runOnUiThread(new Runnable() {
@Override
public void run() {
RelativeLayout progressBar = findViewById(R.id.async_progress_bar);
progressBar.setVisibility(View.INVISIBLE);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
}
});
}
return "";
}
}
和第二种努力,带有单独的异步类
private void calculatePath(){
try{
runOnUiThread(new Runnable() {
@Override
public void run() {
getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
RelativeLayout progressBar = findViewById(R.id.async_progress_bar);
progressBar.setVisibility(View.VISIBLE);
System.out.println("the visibility of progressBar before running is:\t " + progressBar.getVisibility());
}
});
//....
asyncPostClassCorrected aPCC = new asyncPostClassCorrected();
aPCC.url = asyncPostClassCorrected.calculatePathUrl;
aPCC.variables = cred;
recieved = aPCC.execute().get();
//...
runOnUiThread(new Runnable() {
@Override
public void run() {
RelativeLayout progressBar = findViewById(R.id.async_progress_bar);
progressBar.setVisibility(View.INVISIBLE);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
System.out.println("the visibility of progressBar after running is:\t " + progressBar.getVisibility());
Button showPlaces = findViewById(R.id.showPlaces);
showPlaces.setVisibility(View.VISIBLE);
}
});
}
catch (Exception e){
e.printStackTrace();
}
}
这两个代码都相同,但我不知道为什么第二遍代码不起作用。如印刷品所述,“ progressBar”在代码的第一行中是可见的,在第二步中是可见的,而在代码的最后一行中则是不可见的,但是我无法在模拟器中看到任何内容。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。