0

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

в OnCreate основной деятельности у меня есть

FragmentTransaction tx = getFragmentManager().beginTransaction(); 
    tx.replace(R.id.mainFrame, new PlaceOrderFragment()); 
    tx.commit(); 

и в задней прессе этого у меня есть

@Override 
public void onBackPressed() { 
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    if (drawer.isDrawerOpen(GravityCompat.START)) { 
     drawer.closeDrawer(GravityCompat.START); 
    } else { 
     super.onBackPressed(); 
    } 
} 
+1

http://stackoverflow.com/questions/7992216/android-fragment-handle-back-button-press – PeDuCKA

+0

в сделке, вы пытались поместить «addToBackstack() '? – iroiroys

ответ

-2

Заменить певце фрагмент в OnCreate с фрагментом идентификатору, а затем реализуют onBackpressed на одной и той же деятельности и найти этот фрагмент с идентификатором и проверить, является ли он видимым или нулевым, а затем выполнять операции на нем. надеюсь, что вы это получили.

+0

Зачем это делать, когда вы можете просто добавить в заднюю часть. – drulabs

+0

, если у вас есть несколько фрагментов, то вам нужно знать, что фрагмент доступен или нет, шаг за шагом, чтобы вы могли снова вернуться к фрагментам – pratik

+0

Я не думаю, что этот сценарий упоминается в OP. – drulabs

0
 FragmentTransaction tx = getFragmentManager().beginTransaction(); 
      tx.replace(R.id.mainFrame, new PlaceOrderFragment()).addToBackStack("your tag"); 
      tx.commit(); 


     Override onBackPress() and try following code. 

     @Override 
     public void onBackPressed() { 

      int count = getFragmentManager().getBackStackEntryCount(); 

      if (count == 0) { 
       super.onBackPressed(); 
       //your other utility code if needed 
      } else { 
       getFragmentManager().popBackStack(); 
      } 

    } 

Hope this will work for you. 
0

Вы можете сделать это с помощью интерфейса. Этот интерфейс будет реализован в каждом фрагменте. Вот простой пример:

public interface OnBackPressedListener { 
    void onBackPressed(); 
} 

Здесь, если реализовать этот интерфейс в вашем фрагменте, то вы нашли этот метод:

@Override 
    public void onBackPressed() { 
     getActivity().finish(); // Or Do your specific task 

    } 

Теперь ваша деятельность, которая содержит этот фрагмент, который должен использовать onBackPressed() обратного вызова , Написать сильфона код в этом методе

@Override 
    public void onBackPressed() { 

     if (YOUR_DRAWER.isDrawerOpen(GravityCompat.START)) { 
      YOUR_DRAWER.closeDrawer(Gravity.LEFT); //CLOSE Nav Drawer! 
      return; 
     } 

     Fragment fragment=getYourVisibleFragment(); 
     if(fragment!=null){ 
      ((OnBackPressedListener)fragment).onBackPressed(); 
     }else{ 
      Intent intent = new Intent(Intent.ACTION_MAIN); 
      intent.addCategory(Intent.CATEGORY_HOME); 
      intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      startActivity(intent); 
     } 
    } 

Если вы хотите, чтобы получить видимый фрагмент затем просто использовать этот метод

public <F extends Fragment> F getVisibleFragment() { 
     List<Fragment> fragments = getSupportFragmentManager().getFragments(); 
     if (fragments != null) { 
      for (Fragment fragment : fragments) { 
       if (fragment != null && fragment.isVisible()) { 
        return (F) fragment; 
       } 
      } 
     } 
     return null; 
    } 

Вот это :)

0

Прежде всего, необходимо добавить fragmnet резервного стека поэтому мы могли бы получить его позже в onBackPressed()

Замените сделку fragmnet на это

FragmentTransaction tx = getFragmentManager().beginTransaction(); 
tx.replace(R.id.mainFrame, new PlaceOrderFragment()); 
// HERE WE WILL ADD FRAGMENT TO BACKSTACK SO WE COULD GET BACK TO IT 
tx.addToBackStack(null); 
tx.commit(); 

Замените ваш onBackPressed с этим

@Override 
public void onBackPressed() { 
    // CHECKS HOW MANY FRAGMENTS ARE IN THE BACKSTACK 
    int count = getFragmentManager().getBackStackEntryCount(); 

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    if (drawer.isDrawerOpen(GravityCompat.START)) { 
     drawer.closeDrawer(GravityCompat.START); 
    } else { 
     if (count == 0) { 
       // IF NO FRAGMENT IN THE BACKSTACK CALL 
       super.onBackPressed(); 
      } else { 
       // GET THE LAST OPENED FRAGMENT 
       getFragmentManager().popBackStack(); 
      } 
    } 
} 
Смежные вопросы