#java #android #android_studio
Объясните пожалуйста, почему getSupportFragmentManager().findFragmentById(R.id.fragment_container) возвращает null если в классе SingleFragmentActivity он добавляется в FragmentManager?. public class MyFragment extends Fragment { } . public abstract class SingleFragmentActivity extends AppCompatActivity { FragmentManager fm= getSupportFragmentManager(); protected abstract Fragment createFragment(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_fragment); Fragment fragment = fm.findFragmentById(R.id.fragment_container); if (fragment == null) { fragment = createFragment(); fm.beginTransaction() .add(R.id.fragment_container, fragment) .commit(); } } } . public class MyActivity extends SingleFragmentActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Возвращает null Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.fragment_container); } @Override protected Fragment createFragment() { return new MyFragment(); } }
Ответы
Ответ 1
Вызов commit() не выполняет транзакцию немедленно, а ставит в очередь UI-потока. Поэтому следующий за ним вызов findFragmentById выполняется раньше, чем фрагмент будет добавлен. Вместо этого можно завершить транзакцию синхронным методом commitNow() - тогда всё выполнится по порядку.Ответ 2
Вот так вот у меня находит фрагмент
Комментариев нет:
Отправить комментарий