Объясните пожалуйста, почему 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();
}
}
Ответ
Вызов commit() не выполняет транзакцию немедленно, а ставит в очередь UI-потока. Поэтому следующий за ним вызов findFragmentById выполняется раньше, чем фрагмент будет добавлен. Вместо этого можно завершить транзакцию синхронным методом commitNow() - тогда всё выполнится по порядку.
Комментариев нет:
Отправить комментарий