Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在DialogFragment中显示进度对话框_Android_Android Fragments_Fragment_Progressdialog - Fatal编程技术网

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,并等待网络操作结束。