Как вернуться назад страницы или обратно фрагмент из фрагмента в Android?

Я использую макет ящика, который содержит много фрагментов, и когда я нажимаю кнопку "Назад" из определенного фрагмента, он напрямую выходит из приложения. Я вижу много предложений, таких как метод onBackpress(). Ниже приведен мой код.. Я не могу понять, где реализовать этот код и как. Кто-нибудь может мне помочь?

private void selectItemFragment(int position){

    Fragment fragment = null;
    fragmentManager = getSupportFragmentManager();
    switch(position) {
        default:
        case 0:
            fragment = new ProfileFragment();

            // Toast.makeText(getApplicationContext(),"Profile Fragment 1"+position,Toast.LENGTH_LONG).show();
            break;
        case 1:
            fragment = new UploadQuestionFragment();
            //Toast.makeText(getApplicationContext(),"Fragment 2 "+position,Toast.LENGTH_LONG).show();
            break;
        case 2:
            fragment = new DefaultFragment();
            //Toast.makeText(getApplicationContext(),"Fragment 3"+position,Toast.LENGTH_LONG).show();
            break;
        case 3:
            fragment = new GetAllAnswerFragment();
            //Toast.makeText(getApplicationContext(),"All Answer Fragment 4 "+position,Toast.LENGTH_LONG).show();
            break;
        case 4:
            fragment = new AllQuestionFragment();
            //Toast.makeText(getApplicationContext(),"Fragment 5 "+position,Toast.LENGTH_LONG).show();
            break;
        case 5:
            fragment = null;
            break;
    }

    if(fragment !=null){
        fragmentManager.beginTransaction().replace(R.id.main_fragment_container, fragment).commit();

        mDrawerList.setItemChecked(position, true);
        setTitle(titles[position]);
        mDrawerLayout.closeDrawer(mDrawerList);
    }else{
        Intent intent = new Intent(MainActivity.this, FirstActivity.class);
        startActivity(intent);
        finish();
    }

}

2 ответа

Вам нужно добавить в backstack и вытолкнуть из backstack, чтобы добиться этого

Чтобы добавить в backstack использовать

public void showFragment(Fragment fragment, String title) {
    if (fragment != null) {
        String backStateName = fragment.getClass().getName();
        mFragmentManager = getSupportFragmentManager();
        mFragmentTransaction = mFragmentManager.beginTransaction();
        mFragmentTransaction.replace(R.id.container_frame, fragment);
        mFragmentTransaction.addToBackStack(backStateName);
        mFragmentTransaction.commit();
        setActionBarTitle(title);
        if (backStateName == DashBoardFragment.class.getSimpleName()) {
            clearBackStack();
        }
    }
}

Чтобы выскочить из backstack использовать

private void popFragments(int backStackCount) {
    String fragmentTag = mFragmentManager.getBackStackEntryAt(
            backStackCount - 1).getName();
    if (!TextUtils.isEmpty(fragmentTag)) {
        Fragment currentFragment = mFragmentManager
                .findFragmentById(R.id.container_frame);
        if (currentFragment != null) {
            finish();
        } else {
            mFragmentManager.popBackStack();
        }
    }
}

@opu ...

fragmentManager.beginTransaction().replace(R.id.main_fragment_container, fragment).commit();

используйте метод add() вместо метода replace()

примечание - для первого вызова фрагмента используйте метод replace(), в противном случае используйте метод add()

метод add(), а также метод addBackStack() для объединения фрагментов друг с другом

стек фрагментов с использованием backstack

следовательно использовать

//for first fragment
getSupportFragmentManager()
            .beginTransaction()
            .add(R.id.main_activity_content_frame, new RestaurantsListFragment(), "fragment" + i)
            //.addToBackStack("fragment" + (i++))
            .commit();

// for other fragment
getSupportFragmentManager()
            .beginTransaction()
            .add(R.id.main_activity_content_frame, new RestaurantsListFragment(), "fragment" + i)
            .addToBackStack("fragment" + (i++))
            .commit();


// on back press
 @Override
public void onBackPressed() {
    int count = getSupportFragmentManager().getBackStackEntryCount();
    Log.e("POP FRAGMENT STACK", "Count ="+count);
    if(count==0){
        showExitDialog();
    }else{
        Log.e("POP FRAGMENT STACK", "Fragment Info =" + getSupportFragmentManager().getFragments().get(count - 1).getTag());
        getSupportFragmentManager().popBackStack();
    }
}
Другие вопросы по тегам