dei*_*988 5 android fragment progressdialog android-fragments
我想在对话框片段中显示进度对话框.
但是,当我使用此代码时
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();
Run Code Online (Sandbox Code Playgroud)
进度对话框显示在调用dialogFragment的片段中,而不是在DialogFragment本身中.
我做错了什么?
Sim*_*mon 21
干得好.
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;
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个简单的加载对话框片段,其中将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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用以下方法显示和隐藏它:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:顺便说一下,为异步操作(例如网络)显示对话框片段不是一个好习惯。
在对话框片段中使用 ProgressBar。在您的 xml 代码中添加 ProgressBar 视图。
在你的代码中:
ProgressBar progressBar = view.findViewById(R.id.progress);
progressBar .show();
Run Code Online (Sandbox Code Playgroud)
完成时:
progressBar.hide();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29339 次 |
| 最近记录: |