单击按钮后片段类上的ProgressDialog不会立即出现

时间:2016-11-04 18:42:31

标签: android progressdialog

我在按钮点击上有一个Fragment类我应该显示一个包含内容的tableview,这将花费4秒或更长的时间跨度,具体取决于要显示的内容。所以我想在按钮点击后显示progressDialog并在执行方法后解除。

但是这个过程在延迟之后出现,就像在tableview出现之后那样。所以显示进度条有延迟。我尝试过这么多方法仍然没有运气。

以下是我正在尝试的代码。

  @Override
    public void onClick(final View v) {

        switch (v.getId()) {
        case R.id.btn_spreadsheetAddTable: {
            //Some code
        }
            break;

        case R.id.btn_horizontalAddTable: {

            AsyncTask<Void, Void, Void> task = new AsyncTask<Void, Void, Void>() {
                @Override
                protected Void doInBackground(Void... params) {

                    return null;
                }

                @Override
                protected void onPreExecute() {
                    mProgressDialog = new ProgressDialog(getActivity());
                    mProgressDialog.setTitle("Processing...");
                    mProgressDialog.setMessage("Please wait.");
                    mProgressDialog.setCancelable(false);
                    mProgressDialog.setIndeterminate(true);
                    mProgressDialog.show();
                   displayAddTableView(editIsEnabled);

                }

                @Override
                protected void onPostExecute(Void result) {
                    if (mProgressDialog!=null) {
                        mProgressDialog.dismiss();

                    }
                }
            };
            task.execute((Void[])null);



            editIsEnabled = false;

        }

private void displayAddTableView(boolean editEnabled) {
//A code to display dynamic table with dynamic data
}
}

我也尝试过以下网址:

android - Progressbar Late Loading when button click

Loading Dialog, Progress Dialog on Button Click

ProgressDialog doesn't appear immediately

请帮帮我。谢谢。

3 个答案:

答案 0 :(得分:1)

你说这需要4秒才能显示出来。听起来像你在做什么应该在后台线程中完成,而不是UI线程。也许您想在displayAddTableView(editIsEnabled);中执行doInBackground,并发布任何UI更新。

mProgressDialog.show()会将消息发布到UI消息队列,这意味着如果您的UI线程正忙于运行displayAddTableView(editIsEnabled);,则进度微调器将不会显示(或将显示为瞬间 displayAddTableView(editIsEnabled);完成运行后。)

答案 1 :(得分:0)

可能是你的设备或模拟器很慢。你可以先启动进度对话框,然后在onPreExecute上显示:

ProgressDialog mProgressDialog;
.
.
.     //in oncreate
       mProgressDialog = new ProgressDialog(getActivity());
        mProgressDialog.setTitle("Processing...");
        mProgressDialog.setMessage("Please wait.");
        mProgressDialog.setCancelable(false);
        mProgressDialog.setIndeterminate(true);


.
.
.
protected void onPreExecute() {
mProgressDialog.show();

答案 2 :(得分:0)

我已经通过添加Toast并在UIThread中运行表设计代码来修复此问题,因为无法显示进度,因为我的自定义表和进度的设计都需要在同一个线程中运行。

@Override
public void onClick(final View v) {

    switch (v.getId()) {
    case R.id.btn_spreadSheetAddRow: {


        Toast.makeText(this,
                "Loading",
                Toast.LENGTH_SHORT).show();

        final Thread uiThread = new Thread(new Runnable() {

            @Override
            public void run() {

                uiHandler.postDelayed(new Runnable() {

                    @Override
                    public void run() {

                        //Call the heavy table design code;

                        Toast.makeText(getApplicationContext(),
                                "Done",
                                Toast.LENGTH_SHORT).show();

                    }
                }, 80);
            }
        });
        uiThread.start();
    }
        break;