Страницы

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

воскресенье, 29 марта 2020 г.

Как заменить один фрагмент другим?

#java #android


Пытаюсь заменить один фрагмент другим, через кнопку(btnKf_2) которая находиться в
первом фрагменте. Эмулятор запускается, а подмены фрагмента при нажатии кнопки не происходит.
Делаю псалтырь, в нем 22 фрагмента и куча кнопок. Использовал action bar в android studio.

 public void onClick (View v) {
    frag1 = new Kafuzma1();
    frag2 = new Kafuzma2();
    fTrans = getSupportFragmentManager().beginTransaction();
    switch (v.getId()) {
        case R.id.butKf_2:
            fTrans.replace(R.id.frame_layout,frag2);
            fTrans.addToBackStack(null);
        default:
            break;
    }
    fTrans.commit();
}


}

 

Отвечаю на свой вопрос.
СПАСИБО Andrew Goroshko.
Нужно было во фрагмент добавить вот этот код:

    Button butKf_2 = rootView.findViewById(R.id.butKf_2);
    butKf_2.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Fragment kaf2 = new Kafuzma2();
            FragmentManager fragmentManager = Objects.requireNonNull(getActivity()).getSupportFragmentManager();
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
            fragmentTransaction.replace(R.id.frame_layout, kaf2);
            fragmentTransaction.addToBackStack(null);
            fragmentTransaction.commit();
        }
   });

    


Ответы

Ответ 1



Я бы на вашем месте делал немного иначе логику приложения. Вот как бы получилось: есть родительская активность, в ней контейнер с фрагментами ваших кафизм, и кнопку с счетчиком я бы размещал в активности, потому что при нажатии на кнопку в фрагменте у вас подменяется фрагмент и получается что вам нужно делать одно и тоже действие много-много раз. А в вашем случае я бы лучше делал коммит в каждом case, возможно проблема из-за этого, вообще так выглядит переход из одного фрагмента в другой: Fragment fragment = new tasks(); FragmentManager fragmentManager = getActivity().getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.replace(R.id.content_frame, fragment); fragmentTransaction.addToBackStack(null); fragmentTransaction.commit(); код взял из своего проекта. Вообще у вас все должно быть нормально как уже говорил Дмитрий в комментарии. UPDATE: пришел в голову еще один вариант, вы можете заменять данные в фрагменте а не создавать кучу фрагментов (а именно 22), это будет более правильно на мой взгляд. Вы просто при нажатии на кнопку в активности посылаете в фрагмент данные о номере кафизмы и в фрагменте уже грузите эту кафизму по номер откуда вы ее получаете.

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

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