Android 在DialogFragment中显示进度对话框
我想在对话框片段中显示一个进度对话框 但是,当我使用此代码时Android 在DialogFragment中显示进度对话框,android,android-fragments,fragment,progressdialog,Android,Android Fragments,Fragment,Progressdialog,我想在对话框片段中显示一个进度对话框 但是,当我使用此代码时 ProgressDialog prog = new ProgressDialog(ctx); prog.setTitle(getString(R.string.pleaseWait)); prog.setMessage(getString(R.string.webpage_being_loaded)); prog.setCancelable(false); prog.setIndeterminate(true); pro
ProgressDialog prog = new ProgressDialog(ctx);
prog.setTitle(getString(R.string.pleaseWait));
prog.setMessage(getString(R.string.webpage_being_loaded));
prog.setCancelable(false);
prog.setIndeterminate(true);
prog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
prog.show();
进度对话框显示在称为dialogFragment的片段中,而不是dialogFragment本身
我做错了什么?在对话框片段中使用ProgressBar。 在xml代码中添加progressBar视图 在代码中:
ProgressBar progressBar = view.findViewById(R.id.progress);
progressBar .show();
完成时:
progressBar.hide();
试试这个:
ProgressDialog prog = (ProgressDialog)your_view.findViewById(R.id.yourprogress_id);
prog.setTitle(getString(R.string.pleaseWait));
prog.setMessage(getString(R.string.webpage_being_loaded));
prog.setCancelable(false);
prog.setIndeterminate(true);
prog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
prog.show();
或
ProgressDialog prog = (ProgressDialog)your_view.findViewById(R.id.yourprogress_id);
prog.setTitle(getString(R.string.pleaseWait));
prog.setMessage(getString(R.string.webpage_being_loaded));
prog.setCancelable(false);
prog.setIndeterminate(true);
prog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
prog.show();
如果动态使用ProgressDialog强>
ProgressDialog prog= new ProgressDialog(getActivity());//Assuming that you are using fragments.
prog.setTitle(getString(R.string.pleaseWait));
prog.setMessage(getString(R.string.webpage_being_loaded));
prog.setCancelable(false);
prog.setIndeterminate(true);
prog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
prog.show();
在加载数据时
prog.dismiss();
现在如果进度条未显示在对话框中,则必须设置自定义对话框并在该自定义对话框中定义进度条。开始
import android.app.Dialog;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
public class ProgressDialogFragment extends DialogFragment
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setCancelable(false);
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState)
{
ProgressDialog dialog = new ProgressDialog(getActivity(), getTheme());
dialog.setTitle(getString(R.string.pleaseWait));
dialog.setMessage(getString(R.string.webpage_being_loaded));
dialog.setIndeterminate(true);
dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
return dialog;
}
}
下面是一个简单的加载对话框片段,它将gif作为可绘制的动画播放
public class LoadingDialogFragment extends DialogFragment {
public static final String FRAGMENT_TAG = "LoadingFragment";
private ImageView ivLoading;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.dialog_loading, container, false);
if (rootView != null) {
ivLoading = (ImageView) rootView.findViewById(R.id.iv_loading);
ivLoading.setBackgroundResource(R.drawable.anim_drawable);
}
return rootView;
}
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog dialog = super.onCreateDialog(savedInstanceState);
dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
return dialog;
}
@Override
public void onStart() {
super.onStart();
Dialog dialog = getDialog();
if (dialog != null) {
dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
AnimationDrawable loadingAnimation = (AnimationDrawable) ivLoading.getBackground();
loadingAnimation.start();
}
}
}
您可以通过以下方式显示和隐藏它:
public void showLoadingDialog() {
LoadingDialogFragment fragment = (LoadingDialogFragment) getSupportFragmentManager().findFragmentByTag(LoadingDialogFragment.FRAGMENT_TAG);
if (fragment == null) {
fragment = new LoadingDialogFragment();
fragment.setCancelable(false);
getSupportFragmentManager().beginTransaction()
.add(fragment, LoadingDialogFragment.FRAGMENT_TAG)
.commitAllowingStateLoss();
// fragment.show(getSupportFragmentManager().beginTransaction(), LoadingDialogFragment.FRAGMENT_TAG);
}
}
public void hideLoadingDialog() {
LoadingDialogFragment fragment = (LoadingDialogFragment) getSupportFragmentManager().findFragmentByTag(LoadingDialogFragment.FRAGMENT_TAG);
if (fragment != null) {
// fragment.dismissAllowingStateLoss();
getSupportFragmentManager().beginTransaction().remove(fragment).commitAllowingStateLoss();
}
}
编辑:顺便说一下,为异步操作(如网络)显示对话框片段不是一个好的做法。我知道这是一篇非常古老的文章,但我想告诉大家一个解决方案。如果我没有记错,您正在尝试在启动生命周期方法之前显示您的
进度对话框
。在onResume方法中显示progress对话框
在DialogFragment类中的onStart方法中显示progressDialog
@Override
public void onStart() {
super.onStart();
ProgressDialog prog = new ProgressDialog(ctx);
prog.setTitle(getString(R.string.pleaseWait));
prog.setMessage(getString(R.string.webpage_being_loaded));
prog.setCancelable(false);
prog.setIndeterminate(true);
prog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
prog.show();
}
只需将该类用作进度对话框
package com.microfinance.app.microfinance;
import android.app.ProgressDialog;
import android.support.annotation.VisibleForTesting;
import android.support.v4.app.Fragment;
/**
* Created by USER on 9/18/2018.
*/
public class BaseFragment extends Fragment {
@VisibleForTesting
public ProgressDialog mProgressDialog;
public void showProgressDialog() {
if (mProgressDialog == null) {
mProgressDialog = new ProgressDialog(this.getContext());
mProgressDialog.setMessage("Loading ...");
mProgressDialog.setIndeterminate(true);
}
mProgressDialog.show();
}
public void hideProgressDialog() {
if (mProgressDialog != null && mProgressDialog.isShowing()) {
mProgressDialog.dismiss();
}
}
@Override
public void onStop() {
super.onStop();
hideProgressDialog();
}
}
使用
public class DialogFragment extends BaseFragment {...}
如果调用return super.onCreateDialog(),这应该如何工作?您不会返回您创建的进度对话框。谢谢您,修复了输入错误。如果给定一个具体的ProgressDialogFragment片段
,您将如何访问对话框以报告来自AsyncTask.onProgressUpdate
的进度?您应该将ProgressDialogFragment
添加到FragmentManager
中,并调用FragmentManager.findFragmentByTag
,以找到它再说一次。最重要的部分是,如何使用它,我问作为初学者的android开发者。问题是当你试图关闭活动娱乐对话框时。旧的DialogFragment已被销毁,新的DialogFragment尚未创建。那么,什么是解除对话框片段的可靠方法?@savepopulation,为什么显示用于异步操作(如联网)的对话框片段不是一个好的做法?因为当您使用对话框片段阻止ui时,用户无法导航到其他屏幕或返回或执行stg else,并等待网络操作结束。