0

Je veux faire sur ma MainActivity une navigation de propriété pour mes utilisateurs avec hamburger et flèche retour.Android Hamburger Menu et Flèche Retour

Lorsque j'ai seulement un fragment de hamburger, mais si j'ai plus de fragments ajoutés sur mon MainActivity, définissez la flèche de retour.

Comment l'implémenter?

Voici ma mise en œuvre ...

public class MainActivity extends AppCompatActivity 
    implements NavigationView.OnNavigationItemSelectedListener { 

private Toolbar toolbar; 
private DrawerLayout drawer; 
private NavigationView navigationView; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    setSupportActionBar(toolbar); 

    final ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
      this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
    drawer.addDrawerListener(toggle); 
    toggle.syncState(); 

    navigationView.setNavigationItemSelectedListener(this); 

    //TODO: Insert back arrow button if have more than one fragment on backstack 
    /*getSupportFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() { 
     @Override 
     public void onBackStackChanged() { 
      int stackHeight = getSupportFragmentManager().getBackStackEntryCount(); 
      if (stackHeight > 0) { 
       if (getSupportActionBar() != null) { 
        getSupportActionBar().setHomeButtonEnabled(true); 
        getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
        toggle.setDrawerIndicatorEnabled(false); 
       } 
      } else { 
       if (getSupportActionBar() != null) { 
        getSupportActionBar().setDisplayHomeAsUpEnabled(false); 
        toggle.setDrawerIndicatorEnabled(true); 
       } 
      } 
     } 
    });*/ 

    ActivityUtils.addFragmentToActivity(getSupportFragmentManager(), new ListVeiculoFragment(), R.id.container_main); 
} 
} 

Répondre

0
setSupportActionBar(toolbar); 
    toolbar.setTitle(R.string.app_name); 
    toolbar.setTitleTextColor(getResources().getColor(R.color.colorWhite)); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

Mettez ce code dans votre activité lorsque vous utilisez la navigation de style humbarger cela fonctionne pour moi.

0

Vous devez attraper le moment où le nombre des fragments changent et utiliser ce code pour cacher (false)/show (true) le DrawerToggle "Hamburger"

mDrawerToggle.setDrawerIndicatorEnabled(false); 

EDIT:

En votre activité (quelque part), vous avez quelque chose comme ça (où vous changez Fragment en cours):

private void selectItem(int position) { 

Fragment fragment = new MyFragment(); 

FragmentManager fragmentManager = getFragmentManager(); 
fragmentManager.beginTransaction() 
       .replace(R.id.content_frame, fragment) 
       .commit(); 
} 

je changerais dernière ligne par ceci:

fragmentManager.beginTransaction() 
       .replace(R.id.content_frame, fragment) 
       .addToBackStack(null) 
       .commit(); 

puis vérifier:

if(fragmentManager.getBackStackEntryCount() > 1) mDrawerToggle.setDrawerIndicatorEnabled(false); 
+0

Cela peut être la bonne réponse, peut-être en ajoutant plus d'informations ... – Mohsen

+1

Il peut être utile lorsque vous utilisez dans votre tiroir de navigation d'activité. – lesniak

+0

Pourriez-vous m'expliquer un peu mieux en fonction de mon code source ... J'ai inséré du code ... –

3

travail en créant Interface classe:

public interface HideShowIconInterface{ 
    void showHamburgerIcon(); 
    void showBackIcon(); 
} 

Mettre en oeuvre Interface dans votre Activity:

public class YourActivity extends AppCompatActivity implements HideShowIconInterface{ 
    @Override 
    public void showHamburgerIcon() { 
     getSupportActionBar().setDisplayHomeAsUpEnabled(false); 
     mActionBarDrawerToggle.setDrawerIndicatorEnabled(true); 
    } 
    @Override 
    public void showBackIcon() { 
     mActionBarDrawerToggle.setDrawerIndicatorEnabled(false); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    } 
} 

Dans votre Fragment, appelez whateve r vous voulez par:

((HideShowIconInterface) getActivity()).showHamburgerIcon(); 

ou

((HideShowIconInterface) getActivity()).showBackIcon();