【问题标题】:ProgressBar not showing in AsyncTaskProgressBar 未显示在 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();

标签: android android-asynctask android-progressbar


【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-16
      • 2016-11-12
      • 1970-01-01
      • 2015-11-06
      • 2014-02-27
      • 1970-01-01
      相关资源
      最近更新 更多