ProgressBar 未显示在 AsyncTask 中

Posted

技术标签:

【中文标题】ProgressBar 未显示在 AsyncTask 中【英文标题】:ProgressBar not showing in AsyncTask 【发布时间】:2016-12-19 17:15:04 【问题描述】:

我正在通过显示ProgressBar 使用AsyncTaskListView 中加载列表。但在我的代码中,ProgressBar 现在正在显示。无法理解问题。

我使用了与 slidenerd 中相同的代码,但在视频代码中有效,但我的代码似乎不起作用。

Video Link

public class MainActivity extends AppCompatActivity 

    ListView listView;
    String[] items = "Ankush", "Kapoor", "Amit", "Kumar", "Shirshak", "Tillu", "Mishra", "Sudeep", "Dey", "Ayon",
            "Ankush", "Kapoor", "Amit", "Kumar", "Shirshak", "Tillu", "Mishra", "Sudeep", "Dey", "Ayon",
            "Ankush", "Kapoor", "Amit", "Kumar", "Shirshak", "Tillu", "Mishra", "Sudeep", "Dey", "Ayon",
            "Ankush", "Kapoor", "Amit", "Kumar", "Shirshak", "Tillu", "Mishra", "Sudeep", "Dey", "Ayon";

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
        requestWindowFeature(Window.FEATURE_PROGRESS);
        setContentView(R.layout.activity_main);
        listView = (ListView) findViewById(R.id.listView);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, new ArrayList<String>());
        listView.setAdapter(adapter);
        new JSONTask().execute();
    

    public class JSONTask extends AsyncTask<Void, String, Void> 

        private ArrayAdapter<String> adapter;
        private int count = 0;

        @Override
        protected void onPreExecute() 
            adapter = (ArrayAdapter<String>) listView.getAdapter();
            setProgressBarIndeterminateVisibility(true);
            setProgressBarVisibility(true);
        

        @Override
        protected Void doInBackground(Void... params) 
            for (String i : items) 
                publishProgress(i);
                try 
                    Thread.sleep(200);
                 catch (InterruptedException e) 
                    e.printStackTrace();
                
            
            return null;
        

        @Override
        protected void onProgressUpdate(String... values) 
            adapter.add(values[0]);
            count++;
            setProgress((int) (((double) count / items.length) * 10000));
        

        @Override
        protected void onPostExecute(Void aVoid) 
            setProgressBarIndeterminateVisibility(false);
            setProgressBarVisibility(false);
            Toast.makeText(getApplicationContext(), "Done!", Toast.LENGTH_SHORT).show();
        
    

【问题讨论】:

也许您想尝试使用 ProgressDialog 代替?只需创建它并调用 .show() 或 .hide(); 【参考方案1】:

来自setProgressBarVisibility()setProgressBarIndeterminateVisibility()的documentation:

此方法在 API 级别 24 中已弃用。

不再支持 从 API 21 开始。

您应该改用ProgressDialog

【讨论】:

【参考方案2】:

你应该使用简单的ProgressDialog 例如:

ProgressDialog myPd = ProgressDialog.show(context, "Please wait", "Uploading Database to Cloud...", true);
myPd.setCancelable(false);

【讨论】:

以上是关于ProgressBar 未显示在 AsyncTask 中的主要内容,如果未能解决你的问题,请参考以下文章

Linux学习之进度条设计progressBar

自定义View之带进度百分比ProgressBar

ProgressBar 没有出现在位于 Fragment 的 WebView 中,如何在 WebView android 中显示 ProgressBar?

在 RecyclerView 列表之后显示 ProgressBar

winform程序在执行一个方法的同时,如何使用progressbar显示进度?

使用另一个线程时,ProgressBar 不显示