【发布时间】:2018-05-03 05:00:24
【问题描述】:
我试图在单击列表项时显示进度对话框,但进度对话框从未出现。
令人惊讶的是,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);
}
});
也试过了:-
根据其中一条评论,我注释掉了片段转换代码,并显示了进度对话框。
如果这能提供一些关于如何解决问题的线索, 和更多信息:- 加载后,我将关闭下一个片段中的进度对话框。
【问题讨论】:
-
我认为您的片段正在弹出您的进度对话框上方。
-
我认为对话框显示,但它会快速打开屏幕。所以在线程中添加一些延迟。也许它有效。
-
试试
UniversalProgressDialog.showSimpleProgressDialog(ProjectsFragment.this.getActivity(),"Loading","Loading...",false); -
只是为了注释片段交易代码并尝试。
-
所以您需要先打开片段,然后在其 onCreateView() 中显示您的进度对话框,并在检索到数据时关闭您的对话框。
标签: android fragment progressdialog