Переход во фрагмент при нажатии на кнопку

Рейтинг: 4Ответов: 2Опубликовано: 12.12.2014

Всем добрый вечер, уже какой день мучаюсь с этими фрагментами, все никак не могу реализовать, например, у нас есть активити, на нем расположена кнопка, и при нажатии на нее, сразу же открывается новое окно фрагмент. Вот в этом приложении так реализовано. https://play.google.com/store/apps/details?id=com.formul.fizik&hl=ru Нажимаем и открывается.

Обновление

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

К сожалению ошибка http://joxi.ru/GrqBoweHQnpGmz

Ошибку исправил, но у меня получается при нажатии на фрагмент появляется фрагмент, и кнопки остаются, и я могу нажать еще раз и еще раз на кнопку и так кол-во раз, появится фрагмент.

Обновление 2

Я исправил импорт с import android.support.v4.app.Fragment; на import android.app.Fragment; - ошибка пропала.

Я создал

layout: activity_main и fragment.
Fragment1.class и MainActivity
В Fragment.class я прописал 
public class Fragment1 extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment1, null);
    }
}

А в MainActivity заскринил http://joxi.ru/1A5J4n9tn0BprE.
Так же fragment.xml http://joxi.ru/Y2LDVWqH9wyJ26 activity_main http://joxi.ru/l2ZYByVHwDKGmJ

Ответы

▲ 3Принят

Принцип тут такой:

1) В разметке активити есть контейнер (FrameLayout, например) с id="yours_id".

2) В активити, при нажатии на кнопку, добавляем фрагмент в контейнер:

Fragment yoursFragment=new YoursFragment();
FragmentTransaction trans=getFragmentManager().beginTransaction();
trans.add(R.id.yours_id, yoursFragment);
trans.commit();

3) Чтобы всё это работало, вам скорее всего придётся переделать всю логику активити под фрагменты (т.е. кнопка, запускающая открытие фрагмента тоже должна быть во фрагменте, и оба фрагмента должны быть в одном контейнере);

Обновление

Если же вы хотите, чтобы на экране "исчезали" все кнопки и 1-й фрагмент появлялся поверх всего, то вам надо сами кнопки встроить в другой фрагмент. Далее при старте активити добавлять фрагмент с кнопками (в FrameLayout), а при нажатии на одну из них делать

trans.replace(R.id.yours_id, frag1);
trans.addToBackStack(null);
trans.commit();

Так у вас будет всё содержимое с экрана по нажатию кнопки заменяться на frag1, а при нажатии на кнопку "назад" показываться опять фрагмент с кнопками.

▲ 1

Добрый вечер, @Verteletsky!

Я понял Ваш вопрос и могу посоветовать почитать следующие статьи:

  1. Android 3. Fragments. Lifecycle
  2. Android 3. Fragments. Динамическая работа
  3. Android 3. Fragments. Взаимодействие с Activity

и это:

  1. Android 3. Fragments. ListFragment - список
  2. Android 3. Fragments. DialogFragment - диалог

Думаю, если Вам нужно вывести небольшое окно на экран, то Вам нужна ссылка №5. Если фрагмент на весь экран, то ознакомьтесь со ссылками №1-3.

Ссылки ведут на уроки с сайта startandroid.ru. Рекомендую добавить данный сайт себе в закладки, в будущем пригодится. P.S.: рекомендую из личного опыта работы с сайтом. Иногда, конечно, материал подан как-то сжато, но для введения в вопрос и его достаточно.