Как вызвать Fragment из Activity через кнопку?
Не могу вызвать Фрагмент из Активити. У меня есть главная активность и есть Фрагмент. И мне путем нажатия кнопки на главной активности нужно вызвать страницу фрагмента. Я новичок в андроид программировании.Подскажите кто знает.
Конструкция:
Intent intent = new Intent(this, someFragment.class);
startActivity(intent);
Для фрагментов не работает.
Подскажите как можно вызвать Фрагмент из главной Активити путем нажатия кнопки?
Ответы (3 шт):
Где-то внутри вашего Активити, в функции-реакции на нажатие кнопки:
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.add(R.id.fragment_container, new MyFragment()); // или .replace(R.id....)
fragmentTransaction.commit();
Здесь R.id.fragment_container - это контейнер для фрагмента внутри лейаута активити
Собственно что вам нужно сделать?
Создайте в вашей 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);
}
});