0

私はgoogleマップとその中のアドレス(開始/停止)フィールドを持つフラグメントを持つアクティビティを持っています。アクティビティにはフラグメントが添付されていません。

LocationManagerが初めてユーザーの場所に戻るとき、私はアドレスフラグメントの開始フィールドを更新しようとしています。

しかし、時には、私は例外を取得: java.lang.IllegalStateException: Fragment CoordinatesFragment not attached to Activity

をそして、私は理由を理解していません。 私は使用することができる方法Fragment.isAdded()があることを知っていますが、問題を解決する最善の方法ではないようです。トライは状態を復元するとき

はまた、時々私は、この(onRestoreInstanceState(Bundle state)に私はデータを取得し、onMapLoaded()に使用しようとする)

答えて

0
private void setFragment(Fragment fragmentToSet, String tag) { 

    FragmentManager manager = getSupportFragmentManager(); 
    FragmentTransaction transaction = manager.beginTransaction(); 
    Fragment fragment = manager.findFragmentByTag(tag); 
    if (savedInstanceState == null) { 
     if (fragment != null && !fragment.isAdded()) { 
      transaction.replace(R.id.home_container, fragment, tag); 
     } else if (fragmentToSet != null && !fragmentToSet.isAdded()) { 
      transaction.replace(R.id.home_container, fragmentToSet, tag); 
     } 
    }else{ 
     transaction.replace(R.id.home_container, fragment, tag); 
    } 
    transaction.commitAllowingStateLoss(); 
    manager.executePendingTransactions(); 
} 

あなたの活動にフラグメントを設定するには、この機能を使用してみてください。私のために働くこと。あなたのアクティビティのonCreateからsavedInstanceStateを保存することができます

0

RxJava 2を使用することができれば、ObservableのLocationManagerの結果がキャッシュされ、Fragmentが結果をサブスクライブすることができます。

結果が到着し、フラグメントがまだアタッチされていない場合、フラグメントはアタッチ時に結果を受け取ります。それ以外の場合はすぐにそれを受け取るでしょう。

RxJavaを使用してこのような問題に取り組む方法を学ぶことをお勧めします。

関連する問題