Android进度对话框微调器未显示

Android进度对话框微调器未显示,android,spinner,progressdialog,Android,Spinner,Progressdialog,我创建了一个用于进度的类对话框,只是为了避免重写几行代码。请检查下面的代码 public class AppProgressDialog { /** * progress dialog object */ private ProgressDialog progressDialog; /** * stores is progress dialog is cancellable */ private boolean isProgressDialogCancelable = false

我创建了一个用于进度的类对话框,只是为了避免重写几行代码。请检查下面的代码

public class AppProgressDialog {

/**
 * progress dialog object 
 */
private ProgressDialog progressDialog;

/**
 * stores is progress dialog is cancellable 
 */
private boolean isProgressDialogCancelable = false;

/**
 * style of progress dialog
 */
private int progressDialogStyle = ProgressDialog.STYLE_SPINNER;

/**
 * true if progress time not known
 */
private boolean isIndetermined = true;

/**
 * constructor to initialize this custom progress dialog class
 * @param activity activity to which this progress dialog will belong
 * @param message Message to be shown inside progress dialog
 */
public AppProgressDialog(Activity activity) {
    progressDialog = new ProgressDialog(activity);
    progressDialog.setCancelable(isProgressDialogCancelable);
    progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
    progressDialog.setIndeterminate(isIndetermined);
}

/**
 * function to set display message inside progress dialog
 * @param message string to be shown inside progress dialog 
 */
public void setProgressDialogMessage(String message)
{
    if (progressDialog!=null) {
        progressDialog.setMessage(message);
    }
}

/**
 * function to show progress dialog
 */
public void showProgressDialog()
{
    if (progressDialog!=null) {
        if(!progressDialog.isShowing())
            progressDialog.show();
    }
}

/**
 * function to hide progress dialog
 */
public void dismissProgressDialog()
{
    if (progressDialog!=null) {
        if(progressDialog.isShowing())
            progressDialog.hide();
    }
}
这就是我在片段中使用它的方式:

public class TestFragment extends Fragment {

private AppProgressDialog progressDialog;

public static TestFragment newInstance() {

    TestFragment fragment = new TestFragment();
    return fragment;

}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    progressDialog = new AppProgressDialog(getActivity());
}

@Override
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.fragment_login, container, false);

    Button btnTest = rootView.findViewById(R.id.btnTest);
    btnTest.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            new TestAsyncTask().execute();

        }
    });
    return view;
}

@Override
public void onSaveInstanceState(Bundle outState) {

    super.onSaveInstanceState(outState);
}

@Override
public void onResume() {
    super.onResume();
}

class TestAsyncTask extends AsyncTask<String, String, String> {

    @Override
    protected void onPreExecute() {
        progressDialog.setProgressDialogMessage("Logging you to eventizon");
        progressDialog.showProgressDialog();
    }

    @Override
    protected String doInBackground(String... params) {
        //some code
    }

    @Override
    protected void onPostExecute(String result) {
        progressDialog.dismissProgressDialog();
    }

}
公共类TestFragment扩展了片段{

私有AppProgressDialog; 公共静态测试片段newInstance(){ TestFragment fragment=新的TestFragment(); 返回片段; } @凌驾 创建时的公共void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); progressDialog=新建AppProgressDialog(getActivity()); } @凌驾 创建视图上的公共视图(更平坦的充气机, @可为空的视图组容器,@Nullable Bundle savedInstanceState){ View rootView=充气机。充气(R.layout.fragment\u登录,容器,false); 按钮btnTest=rootView.findviewbyd(R.id.btnTest); setOnClickListener(新的OnClickListener(){ @凌驾 公共void onClick(视图v){ new TestAsyncTask().execute(); } }); 返回视图; } @凌驾 SaveInstanceState上的公共无效(束超出状态){ super.onSaveInstanceState(超出状态); } @凌驾 恢复时公开作废(){ super.onResume(); } 类TestAsyncTask扩展了AsyncTask{ @凌驾 受保护的void onPreExecute(){ setProgressDialogMessage(“将您记录到eventizon”); progressDialog.showProgressDialog(); } @凌驾 受保护的字符串doInBackground(字符串…参数){ //一些代码 } @凌驾 受保护的void onPostExecute(字符串结果){ progressDialog.dismissProgressDialog(); } }
}


现在,问题是我无法看到通常在进度对话框中看到的微调器。我正在棒棒糖上测试这一点。

您需要在UI线程中运行进度对话框,因此在您的AsyncTask预执行方法中,请执行以下操作:

getActivity().runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                    progressDialog = new AppProgressDialog(getActivity());
                    progressDialog.setProgressDialogMessage("Logging you to eventizon");
                    progressDialog.showProgressDialog();
                    }
                });

和onPostExecute关闭对话框。

如何使用此类AppProgressDialog=new AppProgressDialog(getActivity())//如果在片段内部使用,则使用“getActivity()”;如果在activity progressDialog.setProgressDialogMessage(“消息”)内部使用,则使用“this”//设置消息progressDialog.showProgressDialog()//显示对话框progressDialog.dismissProgressDialog()//隐藏对话框通常这个问题是因为你在UI线程上做了大量的工作。使用并在
onPreExecute
上显示对话框,在
doInBackground
内完成工作,然后关闭对话框
onPostExecute
。另外,任何与
视图
相关的代码,如在
图像视图
上更改图像,在
文本视图
上更改文本,都必须在
后期执行
上进行。我正在做的唯一繁重的工作是缩放位图并将其设置为片段父布局的背景图像。我删除了它并尝试了它,但不起作用。是的,实际上我是在一个片段中执行此操作,所以我使用getActivity()来代替它。您使用的父主题是什么?您可以显示更多的代码片段吗,我测试了您给定的代码它起作用了吗?您可以看到进度对话框中的微调器吗?是的,除非你展示你的代码,否则很难提供帮助!