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 (将#修改为@)