Как вернуться назад страницы или обратно фрагмент из фрагмента в 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() для объединения фрагментов друг с другом
следовательно использовать
//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();
}
}