Как вызвать Fragment из Activity через кнопку?

Не могу вызвать Фрагмент из Активити. У меня есть главная активность и есть Фрагмент. И мне путем нажатия кнопки на главной активности нужно вызвать страницу фрагмента. Я новичок в андроид программировании.Подскажите кто знает.

Конструкция:

Intent intent = new Intent(this, someFragment.class);
startActivity(intent);

Для фрагментов не работает.

Подскажите как можно вызвать Фрагмент из главной Активити путем нажатия кнопки?


Ответы (3 шт):

Автор решения: Alexander Chernin

Где-то внутри вашего Активити, в функции-реакции на нажатие кнопки:

FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.add(R.id.fragment_container, new MyFragment()); // или .replace(R.id....)
fragmentTransaction.commit();

Здесь R.id.fragment_container - это контейнер для фрагмента внутри лейаута активити

→ Ссылка
Автор решения: Sergei Buvaka

Собственно что вам нужно сделать?

Создайте в вашей Activity такой XML:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

А эту функцию поместите в clickListener вашей кнопки:

void onButtonClick() {
    getSupportFragmentManager().beginTransaction()
        .add(R.id.container, new MyFragment()); // or replace с теми же параметрами
        .addToBackStack(null) // если необходимо, чтоб по нажатию "назад" вы могли вернуться на предыдущий фрагмент. Вместо null можно задать свой ключ.
        .commit();
}
  • fragmentTransaction.addToBackStack(str);

    Добавьте эту транзакцию в задний стек. Это означает, что транзакция будет запомнена после ее фиксации и изменит ее действие, когда позже выскочит из стека.

  • fragmentTransaction.replace(int containerViewId, Fragment fragment, String tag)

    Замените существующий фрагмент, добавленный в контейнер. Это по сути то же самое, что и вызов remove (Fragment) для всех добавленных в настоящее время фрагментов, которые были добавлены с помощью одного и того же контейнера, а затем добавьте (int, Fragment, String) те же аргументы, которые приведены здесь.

  • fragmentTransaction.add(int containerViewId, Fragment fragment, String tag)

    Добавить фрагмент в состояние активности. Этот фрагмент может также иметь свой вид (если Fragment.onCreateView возвращает ненулевой) в представление контейнера активности.

Вот тут неплохой урок по фрагментам.

→ Ссылка
Автор решения: борь

Я понял, что требуется. Используйте navigation

Добавьте страницу в навигации, протяните ей линию. После зайдите в активити и в public View onCreateView допишите прослушиватель кнопкии и само действие навигации. Не забудьте использовать свой id кнопки и R.id

View view = inflater.inflate(R.layout.fragment_home, container, false);

    ImageButton game = view.findViewById(R.id.game);
    game.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Navigation.findNavController(view).navigate(R.id.action_navigation_home_to_fragment_igri);
        }

    });
→ Ссылка