Страницы

Поиск по вопросам

пятница, 28 февраля 2020 г.

Почему findFragmentById возвращает null?

#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



Вот так вот у меня находит фрагмент

Комментариев нет:

Отправить комментарий