1

私は、ユーザーが入力しなければならないいくつかのフィールドを持つフラグメントを持っています。例えば、電話番号を言うことができます。ユーザーが番号を入力すると は、フラグメントはMainActivityからメソッドを呼び出し、mainActivityで行われ、いくつかの操作がある、のは想定してみましょう:フラグメント上のprogressDialogを表示するBroadcastReceiver

の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) 
+0

ブロードキャストレシーバで進行状況のダイアログを表示できません。 の可能な複製[このリンクをチェック](http://stackoverflow.com/questions/8766739/show-an-alert-dialog-in-broadcast-receiver-after -a-system-reboot) –

+0

BRの**進行状況ダイアログを**作成することはできません。そのオブジェクトへの参照がある場合。それを表示することができます。 – mallaudin

+0

@mallaudinどうすればBRからフラグを受け取ったときに、そのフラグメントにprogressDialogを表示できますか? – masmic

答えて

1

以下に変更してください。これを参照してくださいlink

詳細hereを見つけることができます。

+1

の上に掲示されたリンクを読んで解決しました。私はちょうど解決しました。リンクでは、次のような回答があります。 ".setContentView()を呼び出す前に.show()を呼び出す必要があるため、おそらく.addContentView()も呼び出す必要があります。この情報で回答を編集する場合は、私はそれを受け入れるでしょう – masmic

+0

はい。私は私の答えを更新しました。 – mallaudin

0

あなたは進捗ダイアログを表示する前contentViewを設定することはできませんコード

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

私に1つ質問しましょう。どこにbrodacast reciver – Godwin

関連する問題