2016-11-03 14 views
0

私はAndroidでコーディングする方法を学習してきましたが、いくつか問題があります。getFragmentManager()は2回目の呼び出しでnullを返します

今、私は実際にFragmentの仕上げ方法を知らない。つまり、方法getActivity().finish()を使用すると、Activityfinish()になります。私はそれについて読んできましたが、それはまったく正しいものではありません。私は遭遇しましたthis post

また、onDestroy()はデストラクタではありません。実際には オブジェクトは破棄されません。それは特定の状態に基づいて呼び出される単なる方法です。だから インスタンスがまだ生きていて、スーパークラスの のonDestroy()が実行されreturn.Androidが処理を続けると、ユーザーはアプリを再起動したいと考えているので、起動フェーズ が速くなります。このプロセスは何もされず、メモリを再利用すること に必要がある場合、プロセスは

そしてthis oneを殺される。

は、あなたがして、バックグラウンドアプリケーション、そしてそれを取得 殺したことを考えてみましょう。あなたが戻ってくると、 にフラグメントマネージャーのフラグメントA、B、Cがあることを覚えているので、 を再作成して追加します。 しかし、今度はフラグメントマネージャー に追加されたものは、あなたのフラグメント あなたの活動のリストにあるものではありません。

私の場合、2つのアクティビティと2つのフラグメントがあります。私がこのプロセスを初めて使用したとき、それは完全に機能しました。私は私が問題である二番目の

に最初Fragmentから呼び出す最初Fragment

  • に呼び出すIntent
  • を使用して最初の1から私の第二Activityに呼び出す

    • ボタン "リセット"を押すと、Activityが2番目のFragmentから終了します(最初のActivityになります)。この後、私は、全体のプロセスを繰り返し、それが実際に動作しますが、私は、データを更新し続けるために次の行を実装しようとすると:

      private BroadcastReceiver estadoIAReceiver = new BroadcastReceiver() { 
      
          //Cuando cambia el estado de indoor atlas actualizo la interfaz con sus propiedades 
          @Override 
          public void onReceive(Context context, Intent intent) { 
           Log.i("VFragment", "Cambio estado IA"); 
      
           //Ejecutar metodo de un fragment desde una actividad 
           infoF = (InformacionFragment) getFragmentManager().findFragmentById(R.id.posicionamiento_layout); 
           infoF.actualizaInfoEstadoIA(); 
           infoF.onResume(); 
          } 
      }; 
      

      getFragmentManager().findFragmentById(R.id.posicionamiento_layout); 戻りnullので、それは失敗します。だから、基本的に私の質問です。初めてFragmentにアクセスしようとするとinfoFですが、存在しませんので、nullを返しますか?

  • +1

    私はあなたの質問を理解できないかもしれませんが、フラグメントがFragmentManagerにない場合(nullの場合)、フラグメントが破棄され、Fragmentmanagerから削除されたため新しいものを追加する必要があります –

    +0

    時間(私はそれを実行する最初の時間の間、私は "null"を取得しないでください)。だから、なぜ私はそれを@ブライアンにするのか分からない。 –

    +0

    あなたは@VladMatvienkoを意味すると思う。とにかく、もっとコードを表示してください。あなたが提供したコードには、 'getFragmentMangager()'が 'null'を返す理由を示すものは何もありません。また、次の行:「最初の「断片」から2番目の部分に電話する」は疑わしいと思う。一つの 'Fragment'から別の' Fragment'を呼び出すべきではなく、 'Activity'はフラグメント間のトランザクションを処理するべきです。 – Bryan

    答えて

    0

    最後に、数日前に私のエラーが見つかりました。

    解決策は単純です:

    • ただ、グローバル変数

    バンドルdatosGuardadosとして新しいバンドルの変数を作成します。

    • savedInstanceState

    datosGuardados = savedInstanceStateのデータを格納します。

    • 、最終的にはちょうどそれがnullであるかどうかを確認する前に、任意のgetFragmentManager

    を使用するよりも場合(datosGuardados!= null)の infoF =(InformacionFragment)getFragmentManager()。findFragmentById(R.id.posicionamiento_layout) ;

    関連する問題