2016-12-08 22 views
-1

初。それはイントロの後に戻った場合、ナビゲーションドロワーは、ドキュメントの状態ととして初めて示されProgressDialogクラッシュ私はこの問題について、いくつかのいくつかの記事を読んだが、誰も私の問題を解決していないことを言わなければならないすべての

public class MainActivity extends AppCompatActivity{ 
    ... 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     ... 

     //If first run, an intro is shown 
     if (!isIntroShown()) { 
      Intent intent = new Intent(MainActivity.this, IntroWellcomeActivity.class); 
      startActivity(intent); 
      setIntroShown(true); 
      finish(); 
     } 

     //Navigation drawer set up 
     drawerLayout.setDrawerListener(this); 

     setUpToolbar(); 
     setUpNavDrawer(); 

     displayFragment(R.id.navigation_item_1); 

     navView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { 
      @Override public boolean onNavigationItemSelected(MenuItem menuItem) { 
       menuItem.setChecked(true); 
       displayFragment(menuItem.getItemId()); 
       drawerLayout.closeDrawers(); 
       return true; 
      } 
     }); 

:アプリの初回起動時に

は、イントロの活動は、いくつかのデータを要求するために起動されますデフォルトのフラグメントがロードされます。

この断片は、例えば、電話番号をイントロに導入された情報を示しています。この断片では、もし私が望むなら、私はこの数字を変えることができます。これを行うと、バックグラウンドジョブが実行されている間にProgress Dialogが表示されます。

しかし、ここで問題が発生します。この最初の実行では、なぜこれが起こっているのかよく分かりませんが、Progressダイアログが表示されると、logCatでこれを示すアプリケーションがクラッシュします。

E/AndroidRuntime: FATAL EXCEPTION: main 
    Process: com.myapp, PID: 31388 
    android.view.WindowManager$BadTokenException: Unable to add window -- token [email protected] is not valid; is your activity running? 

この後、私は再びアプリケーションを実行します。今回はイントロは表示されず、ナビゲーションドロワも表示されません(最初の実行時にのみ発生します)、電話番号を編集しようとすると、Progress Dialogが表示され、すべて正常に動作します。代わりのgetContext()の)

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

私はgetActivityを(使用しようと試みましたが、問題が解決しない:

は、これは私がフラグメントでProgressDialogを開始する方法です。

だから私は、イントロが示されており、断片がロードされた後の最初の実行時に、何かが開始されていない、または私は間違った場所にprogressDialogを開始していていることと思います。知りません。

+0

利用getActivity()ProgressDialogを初期化し、進捗ダイアログを表示しながら、(もし!getActivity()。isFinishing()){progressDialog.show())をしようとします。また、progressDialogが既に表示されているかどうかを確認します。はいの場合は、それを閉じて再初期化します。 – Raghavendra

+0

ProgressDialogコンストラクタでこれを渡すことができます:getActivity()。getApplicationContext() – Vinodh

答えて

1

私はあなたがダイアログを表示する前にfinish()を呼び出したアクティビティの内部フラグメントを作成すると思います。 if (!isIntroShown())ステートメントでfinish()に電話をかけないでください。あなたが最初の場所でそれを殺すことなく、後で同じ作成した活動に戻ることができイントロ/チュートリアルから

+0

ありがとう!これはうまくいきました!私はそれがそれのようなものでなければならないということを新たにした。 – masmic

0

あなたは活動が実行されているかどうか、あなたのProgressDialogチェックを初期化しようとするとき、もはやそれほど存在しないコンテキストのためのダイアログを表示している場合に発生することがあります。

if(!((Activity) getActivity()).isFinishing()){ 
    progressDialog = new ProgressDialog(getActivity()); 
} 
+0

私はこれを他の投稿で見ましたが、私は必要なものではありません。とにかくProgressDialogを開始する必要があります。 – masmic

+0

アクティブな「Context」がない場合、どのように進捗ダイアログを開始できますか? –

関連する問題