Android 在片段广播接收器上显示progressDialog
我有一个片段,其中包含一些用户必须填写的字段。比如说电话号码。 当用户输入号码时,片段从MainActivity调用一个方法,并且在MainActivity中完成了一些操作,让我们假设: 1-核查 2-验证 我使用BroadcarstReceiver从主活动返回到片段。因此,当验证完成时,我使用BroadcastReceiver向片段发送一个标志,以向用户显示一个progressDialog 此时,progressDialog应该显示,直到收到另一个验证标志 问题是我在RuntimeException上遇到了一些错误,应用程序在应该显示progressDialog的地方崩溃了Android 在片段广播接收器上显示progressDialog,android,android-fragments,broadcastreceiver,progressdialog,Android,Android Fragments,Broadcastreceiver,Progressdialog,我有一个片段,其中包含一些用户必须填写的字段。比如说电话号码。 当用户输入号码时,片段从MainActivity调用一个方法,并且在MainActivity中完成了一些操作,让我们假设: 1-核查 2-验证 我使用BroadcarstReceiver从主活动返回到片段。因此,当验证完成时,我使用BroadcastReceiver向片段发送一个标志,以向用户显示一个progressDialog 此时,progressDialog应该显示,直到收到另一个验证标志 问题是我在RuntimeExcept
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)
请更改为以下代码
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();
}
}
}
在显示进度对话框之前,不能设置
contentView
。看到这个了吗
您可以找到更多信息。嘿,您不能在广播接收器中显示进度对话框。可能的副本无法在BR中创建进度对话框。如果您有对该对象的引用。您可以显示它。@mallaudin当我从BR接收到标志时,我如何在该片段中显示progressDialog?请稍等。@masmic查看下面的答案。不允许以这种方式将runOnUiThread添加到OnCreateView让我问一件事。您在哪里注册brodacast reciverIn onCreate()。不管怎样,我刚刚解决了阅读上面的链接的问题。在链接中有一个答案是:“基本上,你需要在调用.setContentView()之前调用.show(),因此也可能是.addContentView()。”如果你用这个信息编辑你的答案,我会接受它