android - 进度对话框永远不会出现
问题描述
我试图在单击列表项时显示进度对话框,但进度对话框从未出现。
令人惊讶的是,mProgressdialog.isShowing() 是真的。如果有人遇到过类似的问题,请提供一些对该问题的见解。
adapter.setOnItemClickListener(new Adapter.ListClickListener() {
@Override
public void onItemClick(int position, View v) {
//Some computations done.
if (ProjectsFragment.this.getActivity() != null) {
UniversalProgressDialog.showSimpleProgressDialog(getActivity(),"Loading","Loading...",false);
android.support.v4.app.FragmentManager fragmentManager = ProjectsFragment.this.getActivity().getSupportFragmentManager();
android.support.v4.app.FragmentTransaction ft = fragmentManager.beginTransaction();
ft.replace(R.id.sample_content_fragment, new AgendaFragment(), "AGENDA");
ft.commit();
}
}
}
}
});
UniversalProgressDialog 的源代码:-
public class UniversalProgressDialog {
private static ProgressDialog mProgressDialog;
public static void showSimpleProgressDialog(Context context, String title,
String msg, boolean isCancelable) {
try {
if (mProgressDialog == null) {
mProgressDialog = ProgressDialog.show(context, title, msg);
mProgressDialog.setCancelable(false);
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
mProgressDialog.setIndeterminate(true);
mProgressDialog.setCanceledOnTouchOutside(false);
}
if(mProgressDialog.isShowing()){
mProgressDialog.dismiss();
}
if (!mProgressDialog.isShowing()) {
mProgressDialog.show();
}
} catch (IllegalArgumentException ie) {
ie.printStackTrace();
} catch (RuntimeException re) {
re.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void removeSimpleProgressDialog() {
try {
if (mProgressDialog != null) {
if (mProgressDialog.isShowing()) {
mProgressDialog.dismiss();
mProgressDialog = null;
}
}
} catch (IllegalArgumentException ie) {
ie.printStackTrace();
} catch (RuntimeException re) {
re.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
我尝试了什么?
尝试将显示代码的进度对话框移动到
尝试将片段转换代码移动到另一个线程,如下所示:-
private class PerformFragmentTransition extends Thread {
public PerformFragmentTransition() {
}
@Override
public void run() {
android.support.v4.app.FragmentManager fragmentManager = ProjectsFragment.this.getActivity().getSupportFragmentManager();
android.support.v4.app.FragmentTransaction ft = fragmentManager.beginTransaction();
ft.replace(R.id.sample_content_fragment, new AgendaFragment(), "AGENDA");
ft.commit();
}
}
还尝试过:-
getActivity().runOnUiThread(new Runnable(){
public void run() {
UniversalProgressDialog.showSimpleProgressDialog(getActivity(),"Loading","Loading...",false);
}
});
还尝试过:-
根据其中一条评论,我注释掉了片段转换代码并显示了进度对话框。
如果这能提供一些关于如何解决问题的线索,以及更多信息:- 我将在加载后关闭下一个片段中的进度对话框。
解决方案
mProgressDialog = ProgressDialog.show(context, title, msg);
用下面的代码替换上面的代码:
mProgressDialog = new ProgressDialog(context);
mProgressDialog.setTitle(title);
mProgressDialog.setMessage(msg);
问题是您在设置所需属性之前在代码中创建对话框时显示对话框。并且请删除 try catch 块,这样您就会得到实际发生的错误。并且可以在控制台中看到
推荐阅读
- azure - Azure 服务总线关联筛选器的效率如何?
- python - 如何更改 pytest 生成的参数
- c++ - 确保与 std::hardware_constructive_interference_size 共享的正确方法
- c# - 如何使用 AJAX JQuery ASP .NET MVC 4 将 FormCollection 和文件传递给控制器
- sql - 如何从增量年份值中获取旧值?
- enums - 为什么在只需要一个字节时,Rust 使用两个字节来表示这个枚举?
- python - 无法加载原生 TensorFlow 运行时。运行 g2p-seq2seq --version 时
- android-intent - 如何从用户输入(语音)中捕获触发词?
- javascript - 如何解决 Javascript 中未定义的数组属性?
- css - 为什么我的 css 卡在不同的位置高度