J'ai créé une application avec une activité qui utilise un tiroir de navigation pour ouvrir un certain nombre de fragments différents. J'ai la barre d'action drawertoggle, mais elle n'est pas très visible . Si je place un bouton dans le onCreateView dans mon fragment principal (le fragment qui apparaît au premier démarrage de mon application), comment puis-je l'obtenir pour ouvrir la navigation tiroir contrôlé par mon activité?
Cela semble fonctionner. La réponse est beaucoup plus simple que je ne le pensais.
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View fragView = inflater.inflate(R.layout.mainmenu, container, false);
button1 = (Button) fragView.findViewById(R.id.button1);
mDrawerLayout = (DrawerLayout)getActivity().findViewById(R.id.drawer_layout);
mDrawerList = (ListView)getActivity().findViewById(R.id.left_drawer);
button1.setOnClickListener(this);
return fragView;
}
@Override
public void onClick(View v) {
mDrawerLayout.openDrawer(mDrawerList);
}
Merci pour vos réponses.
si vous avez besoin d'ouvrir la diapositive:
mDrawerLayout.openDrawer(Gravity.LEFT); //Edit Gravity.START need API 14
si vous avez besoin de fermer la diapositive
mDrawerLayout.closeDrawer(Gravity.LEFT); //Edit Gravity.START need API 14
EXEMPLE
mon mDrawerLayout est instancié ici:
mDrawerLayout = (DrawerLayout)findViewById(R.id.my_drawer_layout);
mon état de diapositive:
mSlideState=false;
si vous avez besoin de connaître l'état du menu des diapositives (fermé, ouvert). Utilisez ce code:
mDrawerLayout.setDrawerListener(new ActionBarDrawerToggle(this,
mDrawerLayout,
R.drawable.ic_menu_slide,
0,
0){
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
mSlideState=false;//is Closed
}
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
mSlideState=true;//is Opened
}});
enfin. Vous pouvez utiliser votre événement click comme ceci:
public void clickEventSlide(){
if(mSlideState){
mDrawerLayout.closeDrawer(Gravity.END);
}else{
mDrawerLayout.openDrawer(Gravity.END);
}}
dans mon cas, mon menu de diapositives est à droite (Gravity.END), mais si vous avez besoin de la gauche, essayez avec Gravity.START
Ce travail pour moi, j'espère résolu votre problème.
si vous utilisez l’activité de navigation par défaut dans Android, il vous suffit de rajouter ce code dans l’auditeur de clic du bouton
mDrawerLayout.openDrawer(Gravity.START);
pour fermer vous n'avez pas à faire quelque chose.
J'ai une solution beaucoup plus simple en utilisant isDrawerOpen()
.
Ceci ferme ou ouvre automatiquement le tiroir de navigation en fonction de son état actuel (Ouvert/Fermé)
Button hamMenu = findViewById(R.id.ham_menu);
hamMenu.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DrawerLayout navDrawer = findViewById(R.id.drawer_layout);
// If navigation drawer is not open yet open it else close it.
if(!navDrawer.isDrawerOpen(GravityCompat.START)) navDrawer.openDrawer(Gravity.START);
else navDrawer.closeDrawer(Gravity.END);
}
});
Utilisez le modèle de rappel standard comme décrit ici:
http://developer.Android.com/training/basics/fragments/communicating.html
Lorsque vous appuyez sur le bouton, initiez un rappel de l’activité et faites-la ouvrir votre tiroir.