1

我有一段用戶必須填寫的字段。比如說電話號碼。 當用戶輸入的數量,所述片段從調用MainActivity的方法和有在MainActivity完成某些操作,讓我們假設:在片段上顯示progressDialog BroadcastReceiver

1-驗證

2-驗證

我使用BroadcarstReceiver從MainActivity回傳到片段。所以當驗證完成後,我使用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) 
+0

嘿你不能顯示進度對話在廣播Receiver.Possible重複的 [http://support.microsoft.com/kb/12766739/show-an-alert-dialog-in-broadcast-receiver-after -a-system-reboot) –

+0

無法在BR中創建**進度對話框。如果你有一個對象的引用。你可以展示它。 – mallaudin

+0

@mallaudin當我從無線電通信局收到國旗時,我怎麼能在該片段中顯示progressDialog? – masmic

回答

1

不能顯示進度對話框前設置contentView。看到這link

你可以找到更多的信息here

+1

我剛剛解決。在鏈接中有一個答案: 「基本上,在調用.setContentView()之前需要調用.show(),因此可能也需要.addContentView()。」如果你用這個信息編輯你的答案,我會接受它 – masmic

+0

是的。我已經更新了我的答案。 – mallaudin

0

請更改爲下面的代碼

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(); 
    } 
} 
} 
+0

是不允許添加runOnUiThread那種方式來onCreateView – masmic

+0

請看編輯代碼 – Godwin

+0

讓我問一個問題。你在哪裏註冊brodacast reciver – Godwin