【问题标题】:Show progressDialog on fragment BroadcastReceiver在片段 BroadcastReceiver 上显示 progressDialog
【发布时间】:2016-11-18 11:08:12
【问题描述】:

我有一个片段,其中包含用户必须填写的一些字段。比如说电话号码。 当用户输入数字时,fragment 会调用 MainActivity 中的一个方法,并且在 mainActivity 中进行了一些操作,假设:

1- 验证

2- 验证

我使用 BroadcarstReceiver 从 MainActivity 与 Fragment 进行通信。因此,当验证完成后,我使用 BroadcastReceiver 向片段发送一个标志,以向用户显示一个 progressDialog。

此时,progressDialog 应该显示,直到收到另一个验证标志。

问题是我收到了一些关于 RuntimeException 的错误,并且应用程序在应该显示 progressDialog 的地方崩溃了。

public class ProfileFragment extends Fragment {

    ProgressDialog progressDialog;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_profile, container, false);

        ...

        progressDialog = new ProgressDialog(getContext());
        progressDialog.setContentView(R.layout.custom_progressdialog);

        ...

        return rootView;
    }

    protected BroadcastReceiver ActivityDataReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        if(ACTION_INTENT.equals(intent.getAction())) {
            progressDialog.show();
        }
        if(ACTION_INTENT2.equals(intent.getAction())) {
            progressDialog.dismiss();
        }
    }
}

这是 logcat 显示的内容:

FATAL EXCEPTION: main
Process: com.detgsm, PID: 21736
android.util.AndroidRuntimeException: requestFeature() must be called before adding content 
    at com.android.internal.policy.PhoneWindow.requestFeature(PhoneWindow.java:398)
    at com.android.internal.app.AlertController.installContent(AlertController.java:249)
    at android.app.AlertDialog.onCreate(AlertDialog.java:423)
    at android.app.ProgressDialog.onCreate(ProgressDialog.java:249)
    at android.app.Dialog.dispatchOnCreate(Dialog.java:578)
    at android.app.Dialog.show(Dialog.java:314)
    at com.detgsm.ProfileFragment$7.onReceive(ProfileFragment.java:271)
    at android.support.v4.content.LocalBroadcastManager.executePendingBroadcasts(LocalBroadcastManager.java:297)
    at android.support.v4.content.LocalBroadcastManager.access$000(LocalBroadcastManager.java:46)
    at android.support.v4.content.LocalBroadcastManager$1.handleMessage(LocalBroadcastManager.java:116)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:158)
    at android.app.ActivityThread.main(ActivityThread.java:7224)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

【问题讨论】:

  • 嘿,你不能在广播接收器中显示进度对话框。Check this link的可能重复
  • 您无法在 BR 中创建进度对话框。如果您有对该对象的引用。你可以展示一下。
  • @mallaudin 当我收到来自 BR 的标志时,如何在该片段中显示 progressDialog?
  • 等一下.....
  • @masmic 在下面看到我的答案。

标签: android android-fragments broadcastreceiver progressdialog


【解决方案1】:

不能在显示进度对话框之前设置contentView。看到这个link

您可以找到更多信息here

【讨论】:

  • 我刚刚解决了。在链接中有一个答案说:“基本上,您需要在调用 .setContentView() 之前调用 .show() ,因此也可能需要调用 .addContentView() 。”如果您使用此信息编辑您的答案,我会接受它
【解决方案2】:

请改成下面的代码

   public class ProfileFragment extends Fragment {

ProgressDialog progressDialog;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                     Bundle savedInstanceState) {

    progressDialog = new ProgressDialog(getContext());
    progressDialog.setContentView(R.layout.custom_progressdialog);


}

protected BroadcastReceiver ActivityDataReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
    if(ACTION_INTENT.equals(intent.getAction())) {
          getActivity().runOnUiThread(new Runnable() {
              @Override
              public void run() {
              progressDialog.show();
              }
         });
    }
    if(ACTION_INTENT2.equals(intent.getAction())) {
        progressDialog.dismiss();
    }
}
}

【讨论】:

  • 不允许以这种方式将 runOnUiThread 添加到 onCreateView
  • 让我问一件事。你在哪里注册广播接收器
  • 在 onCreate() 中。无论如何,我刚刚解决了阅读上面发布的链接
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-09
  • 1970-01-01
相关资源
最近更新 更多