как вернуться к предыдущему фрагменту при нажатии кнопки возврата вручную

У меня есть одно действие и несколько фрагментов в моем приложении. Я хочу возвращать один за другим фрагменты при нажатии кнопки «Назад», которая во всех фрагментах.

я использовал этот сегмент кода, но при нажатии кнопки «Назад» он переходит к основному действию без возврата один за другим. Также я хочу изменить значок, когда дело доходит до основного действия. (msg_alert)

 btnBack.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            FragmentManager fm = MainActivity.this
                    .getSupportFragmentManager();
            FragmentTransaction ft = fm.beginTransaction();
            Fragment fragment = new MainMenuLayout();
            ft.replace(R.id.activity_main_content_fragment, fragment);
            ft.commit();
            btnBack.setVisibility(View.VISIBLE);
            btnBack.setImageResource(R.drawable.msg_alert);
            tvTitle.setText("Layout 0");

        }
    });

person user3800832    schedule 01.08.2014    source источник
comment
Ознакомьтесь с классом BaseContainerFragment.java в этой ссылке. Он делает все, что вам нужно. host/19859871#19859871" title="динамическое изменение фрагментов внутри узла вкладки фрагмента"> stackoverflow.com/questions/18120510/   -  person AndroidHacker    schedule 01.08.2014
comment
вы должны посмотреть это   -  person vijay_t    schedule 01.08.2014
comment
Я просматриваю эти статьи, но все же не знаю, как это сделать. у меня есть много фрагментов в этом приложении.   -  person user3800832    schedule 01.08.2014


Ответы (5)


Допустим, у вас есть два фрагмента A и B. Фрагмент A присоединяется при запуске активности, и при любом пользовательском событии вы переходите к фрагменту B, заменяя фрагмент A.

1) при добавлении фрагмента B к действию

// Works with either the framework FragmentManager or the
// support package FragmentManager (getSupportFragmentManager).
getSupportFragmentManager().beginTransaction()
                           .replace(R.id.container, fragmentB, "detail")
                           // Add this transaction to the back stack
                           .addToBackStack()
                           .commit();

2) переопределить onBackPressed действия для обработки события нажатия кнопки «Назад».

@override
public void onBackPressed() {
     // is there any fragment in backstack, if yes popout.
    if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
        getSupportFragmentManager().popBackStack();
        return;
    }
    super.onBackPressed();
}
person vijay_t    schedule 01.08.2014
comment
@user3800832 user3800832 столько раз, сколько вы вызываете addToBackStack() во фрагментной транзакции, он будет подталкивать замененный фрагмент к обратному стеку. А вызов getSupportFragmentManager(). \FragmentStack.java - person vijay_t; 01.08.2014

это еще один вариант,

в действии.

Fragment secondfragment= new SecondFragmnet();

 @Override
public void onBackPressed() {

     if(secondfragment.isVisible()){
    // replace 1st fragment
      }else{
         // Alert dialog for Exit App
     }
// you can check multiple fragments.

Надеюсь, это поможет вам

person Rajesh Mikkilineni    schedule 01.08.2014

Вы должны использовать метод addToBackStack() при выполнении транзакции между фрагментами...

Прочитайте это : Реализовать обратную навигацию для фрагментов

Используйте следующий код при использовании транзакции фрагмента...

String backStateName = fragment.getClass().getName(); // getting Fragment Name..
FragmentManager fragmentManager = getFragmentManager();
    fragmentManager.beginTransaction().replace(R.id.content_frame, fragment)
    .addToBackStack(backStateName) //adding it to BackStack..
    .commit();
person Pragnesh Ghoda シ    schedule 01.08.2014
comment
как передать фрагменты, потому что ошибка показывает подчеркивание фрагмента - person user3800832; 01.08.2014
comment
напишите этот код, когда вы выбираете фрагмент.. значит в действии, где вы обрабатываете транзакцию фрагмента.. - person Pragnesh Ghoda シ; 01.08.2014

Во фрагментах у нас нет обратной навигации.

Мы можем добиться этого с помощью метода replace().

person user2047685    schedule 01.08.2014

Я видел в вашем коде, что вы только заменяете фрейм содержимого. и, таким образом, результат обратного нажатия доходит до активности.
Также убедитесь, что у вас есть кнопка «Назад» в действии
это тестовый xml для действия

<?xml version="1.0" encoding="utf-8"?>

<Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Back" />

<FrameLayout
    android:id="@+id/activity_main_content_fragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
</FrameLayout>

Используйте

Fragment fragment = new MainMenuLayout();
                    ft.replace(R.id.activity_main_content_fragment, fragment);
                    ft.addToBackStack(null);// TODO parameter here it tag of fragment or null or "" String
                    ft.commit();


Для получения дополнительной информации о бэкстеке фрагментов перейдите к этой ссылке для разработчиков Android:-Фрагмент BackStack

person Pravin    schedule 01.08.2014