2016-12-05 2 views
0

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

Я создаю это:

private void onBackPressedInFragments(){ 
    if(backgroundSelectFragment != null && backgroundSelectFragment.isVisible()) 
    backgroundSelectFragment.getActivity().onBackPressed(); 
} 

но когда я открыть фрагмент и нажмите BackButton в телефон я просто закрыть приложение. Моё приложение имеет один вид деятельности и 2 фрагмента:

Здесь я создать и показать фрагмент:

backgroundBtn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      if (backgroundSelectFragment == null) { 
       backgroundSelectFragment = new BackgroundSelectFragment(); 
       FragmentManager fm = getFragmentManager(); 
       fm.beginTransaction() 
         .add(R.id.main_relative, backgroundSelectFragment, "background") 
         .setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out) 
         .show(backgroundSelectFragment) 
         .commit(); 
      } else { 
       if (backgroundSelectFragment.isHidden()) { 
        showFragmentBackground(); 
       } else { 
        hideFragmentBackground(); 
       } 
      } 
     } 
    }); 

любые идеи, ребята?

ответ

1

Переопределение onBackPressed в вашей деятельности. Если есть какой-либо фрагмент в backstack, чем popBackStack() иначе просто finish() ваша деятельность.

private boolean allowedToExit = false; // class level 

@Override 
public void onBackPressed() { 
    int backStackEntryCount = getSupportFragmentManager().getBackStackEntryCount(); 
    // this is the last item 
    if (backStackEntryCount == 1) { 
     if (allowedToExit) 
      finish(); 
     else { 
      allowedToExit = true; 
      Toast.makeText(this, "Press again to exit", Toast.LENGTH_SHORT).show(); 
      new Handler().postDelayed(new Runnable() { 
       @Override 
       public void run() { 
        allowedToExit = false; 
       } 
      }, 1000); 
      return; 
     } 
    } 
    // we have more than 1 fragments in back stack 
    if (backStackEntryCount > 1) { 
     getSupportFragmentManager().popBackStackImmediate(); 
     // getSupportFragmentManager().beginTransaction().commit(); 
    } else 
     super.onBackPressed(); 
} 
Смежные вопросы