How to open navigation drawer on button click in m

2019-02-02 14:22发布

问题:

I have made an app with one activity which uses a navigation drawer to open a number of different fragments. I have the actionbar drawertoggle, but it is not very visible. If I place a button in the onCreateView in my main fragment(the fragment that appears when my app first starts up), how can I get it to open the navigation drawer controlled by my activity?


This seems to work. The answer is much simpler than I thought it would be.

@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);          

    }

Thank you for your answers.

回答1:

if you need open the slide:

mDrawerLayout.openDrawer(Gravity.LEFT); //Edit Gravity.START need API 14

if you need close the slide

mDrawerLayout.closeDrawer(Gravity.LEFT); //Edit Gravity.START need API 14

EXAMPLE

my mDrawerLayout is instanced here:

mDrawerLayout = (DrawerLayout)findViewById(R.id.my_drawer_layout);

my slide state:

mSlideState=false;

if you need to know the slide menu state (closed, opened). Use this 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
}});

finally. You can use your click event like this:

public void clickEventSlide(){
if(mSlideState){                
    mDrawerLayout.closeDrawer(Gravity.END);
}else{              
    mDrawerLayout.openDrawer(Gravity.END);
}}

in my case my slide menu is at the right (Gravity.END), but if you need on the left, try with Gravity.START

This work for me, I hope solved your problem.



回答2:

if you are using from default navigation activity in android you just have to add this code in click listener of button --->

mDrawerLayout.openDrawer(Gravity.START);

for closing you do not have to do something.



回答3:

Use the standard callback model as described here:

http://developer.android.com/training/basics/fragments/communicating.html

When you press the button, initiate a callback to the activity and have it open your drawer.



回答4:

I have a much simpler solution using isDrawerOpen().

This automatically closes or opens the navigation drawer based on the drawer's current state (Opened/Closed)

    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);
        }
    });