2017-01-08 18 views
0

フラグメントがアンドロイドフレームワークによってどのように管理されているかを調べようとしています。私の研究を通して、私は断片についてはわからなかったたくさんの新しいことを知るようになりましたが、起こっている。フラグメントはビューの状態をどのように復元していますか?

私のシナリオを最初に理解してください。それは次のようになります: 2つのフラグメントを1つずつ追加するアクティビティが1つあります。活性は最初にロードされたときにフラグメントAは、コードの下に使用してそれに接続されている:

private void initFirstFragment(){ 
    Bundle bundle = new Bundle(); 
    bundle.putString("TEXT_TO_SHOW", "FIRST ACTIVITY\nFIRST DUMMY FRAGMENT"); 
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
    fragmentTransaction.replace(R.id.frameLayoutFragmentContainer, FirstDummyFragment.newInstance(bundle), FirstDummyFragment.class.getSimpleName()); 
    fragmentTransaction.addToBackStack(null); 
    fragmentTransaction.commit(); 
} 

それは

FirstDummyFragmentロードされるときにフラグメントAのこれらのコールバックメソッドが呼び出される:のonCreate:savedInstanceState --->をヌル

FirstDummyFragment:onCreateView:savedInstanceState --->ヌル

FirstDummyFragment:onResume

フラグメントAでは、編集テキストがあり、テキストを入力します。

ボタンは、次に断片Bは、コードの下に使用して同じ容器に添加されるアクティビティの内部をクリックする:コールバックメソッドの下

public void openSecondFragment() { 
    Bundle bundle = new Bundle(); 
    bundle.putString("TEXT_TO_SHOW", "FIRST ACTIVITY\nSECOND DUMMY FRAGMENT"); 
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
    fragmentTransaction.replace(R.id.frameLayoutFragmentContainer, SecondDummyFragment.newInstance(bundle), SecondDummyFragment.class.getSimpleName()); 
    fragmentTransaction.addToBackStack(null); 
    fragmentTransaction.commit(); 
} 

はフラグメントB

SecondDummyFragmentを添加した後に呼び出される:のonCreate。 savedInstanceState ---> null

FirstDummyFragment:onDestroyView

SecondDummyFragment:onCreateView

SecondDummyFragment:onResume

私は戻るボタンを押し

、断片Bは破壊され、フラグメントAは

SecondDummyFragmentと呼ばれ、フォアグラウンドにし、コールバックメソッドの下に来る:onDestroyView

SecondDummyFragment:onDestroy

SecondDum myFragment:onDetach

FirstDummyFragment:onCreateView:savedInstanceState --->ヌル

FirstDummyFragment:onResume

とフラグメントAのエディットテキストは、以前のフラグメントBを追加する前に、私はそれに入力したのと同じテキストが含まれています私は、Fragment Aが再び作成されたときに、savedInstanceStateがnullで、onCreateViewが全く新しいViewオブジェクトを返しても、Fragment Aのビューステートを復元する方法を混乱させます。

+0

これはあなたを助けるはずです。 https://stackoverflow.com/questions/15313598/once-for-all-how-to-correctly-save-instance-state-of-fragments-in-back-stack – akash93

+0

@ akash93私の質問には関係ありません。 – Vikalp

答えて

0

最後に私の答えはhereでした。

Androidはこの方法で設計されています。この場合、View State Saving/Restoringは内部でFragmentと呼ばれます。結果として、内部的にView State Saving/Restoring、例えばEditTextやTextViewとandroid:freezeText = "true"を実装するすべてのViewが自動的に保存され、状態が復元されます。以前のものとまったく同じように表示されます。

関連する問題