web-dev-qa-db-fra.com

Comment ouvrir le tiroir de navigation en cliquant sur le bouton dans le fragment principal?

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.

11
user2729524

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.

52
Miguel Rodríguez

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.

6
behrad

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);
        }
    });
0
Sapnesh Naik

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.

0
Kuffs