1

У меня есть рабочая модель фрагментов, когда я отлаживал код, я увидел, что фрагмент onCreate вызывается 4 раза.Фрагмент: onCreate вызывается 4 раза

Ниже мой код: MyFragmentActivity

class MyFragmentActivity extends FragmentActivity{ 

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     if (savedInstanceState == null) { 
     getSupportFragmentManager().beginTransaction().replace(fragmentID, new MyListFragmentt()) 
      .replace(detailFragmentID, new MyDetailFragment()).commit(); 
     } 
} 

@Override 
    protected void onRestart() { 
     getSupportFragmentManager().beginTransaction().replace(detailFragmentID, new MyDetailFragment()).commitAllowingStateLoss(); 
} 

} 

MyDetailFragment.class

class MyDetailFragment extends Fragment{ 

// has method like oncreate(),onCreateView(),onSaveInstanceState() 
} 

Как мой OnCreate из MyDetailFragment называется? Когда я перехожу к какой-либо другой деятельности и возвращаюсь, а затем наклоняю устройство только тогда, он вызывается, а onSaveInstanceState из MyDetailFragment вызывается несколько раз.

Как я могу решить это, я просмотрел несколько сообщений на SO, но он говорит, что нам нужно использовать методы HIDE,Show и другие вещи? но что это за душа?

EDIT

Когда я возвращаюсь из предыдущей деятельности, мои данные в MyDetailFragment должны быть обновлены.

+0

кажется, ур создание многоэкземплярный же вида фрагментов. вы можете показать, как u добавить фрагменты к активности –

+0

@PulkitSethi жаль, что я не получил вас? – Goofy

+0

В вашем классе активности, как вы добавляете эти фрагменты, можете ли вы делиться кодом активности ur –

ответ

0
i think ur recreating fragments multiple times, u do new MyListFragment everytime on onCreate function, call findFragmentByTag to get the existing fragment and set that, if null (first time) then create one 

/здесь некоторый код мат, если это не работает и ур приложение имеет один фрагмент лучше просто создать XML и имеют только фрагмент тега в нем, и установить, что XML в функции setContentView */

// declare following member variable 
    MyFragment _fragment; 

    // in onCreate function, call this method 

    private void setupFragment() 
    { 
     _fragment = (MyFragment)getFragmentManager().findFragmentByTag("MyFragment"); 
     if(null == _fragment) 
     { 
    _fragment = new MyFragment(); 
    } 
    // now do the fragment transaction 
FragmentTransaction trans = getFragmentManager().beginTransaction(); 
trans.add(containerId, _fragment, "MyFragment"); // here tag is important 
trans.commit(); 
    } 
+0

Спасибо, да, вы можете быть правы, можете ли вы показать мне, как это сделать и также когда я возвращаюсь из предыдущей активности в эту деятельность, я хочу, чтобы данные были обновлены во фрагментах? как это сделать – Goofy

+0

@ Goofy это помогло? –

0

Попробуйте

MyDetailFragment fragment = new MyDetailFragment(); 
@Override 
    public void onCreate(Bundle savedInstanceState) { 
     if (savedInstanceState == null) { 

     getSupportFragmentManager().beginTransaction().replace(fragmentID, new MyListFragmentt()) 
      .replace(detailFragmentID, fragment).commit(); 
     } 
} 

@Override 
    protected void onRestart() { 
     if(fragment != null) { 
     getSupportFragmentManager().beginTransaction().replace(detailFragmentID, fragment).commitAllowingStateLoss(); 
     } 
} 
+0

Но будут ли обновлены мои данные в MyDetailFragment? – Goofy

+0

Я попробовал это, все еще его называли 4 раза – Goofy

Смежные вопросы