FDM.Pro
FDM.Pro

Reputation: 37

Can not open NavigationDrawer from Toolbar Menu Items android

Hi I try to use this tutorial to make a NavigationDrawer in android but I wan't to change the way that Drawer is open. the tutorial is this: http://www.androidhive.info/2015/04/android-getting-started-with-material-design/

in this tutorial the Drawer open with default home button in toolbar I want to open it with menu item.

this is my main code:

public class First_page extends AppCompatActivity implements FragmentDrawer.FragmentDrawerListener  {

    Button go_layout;
    private Toolbar toolbar;
    private FragmentDrawer drawerFragment;

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

        toolbar = (Toolbar)findViewById(R.id.toolbar);

        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayShowTitleEnabled(false);
        getSupportActionBar().setHomeButtonEnabled(true);
        getSupportActionBar().setDisplayUseLogoEnabled(true);
        getSupportActionBar().setLogo(R.drawable.page_logo_2);

        drawerFragment = (FragmentDrawer)
                getSupportFragmentManager().findFragmentById(R.id.fragment_navigation_drawer);
        drawerFragment.setUp(R.id.fragment_navigation_drawer, (DrawerLayout) findViewById(R.id.drawer_layout), toolbar);
        drawerFragment.setDrawerListener(this);

        go_layout = (Button)findViewById(R.id.go_to_page);

        go_layout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Intent intent = new Intent(First_page.this, Full_page.class);
                startActivity(intent);

            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);

        return true;
    }


    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.right_btn) {


            Toast.makeText(First_page.this, "Right_btn clicked", Toast.LENGTH_LONG).show();

            drawerFragment = (FragmentDrawer)
                    getSupportFragmentManager().findFragmentById(R.id.fragment_navigation_drawer);
            drawerFragment.setUp(R.id.fragment_navigation_drawer, (DrawerLayout) findViewById(R.id.drawer_layout), toolbar);
            drawerFragment.setDrawerListener(this);

        }

        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onDrawerItemSelected(View view, int position) {

    }
}

Upvotes: 1

Views: 158

Answers (2)

Cristofer
Cristofer

Reputation: 1106

My method is a onClick called "btnClickSideBar" . You can call it whatever you want. When you give a click it will check if the Drawer is Open or Close. If it is Open our method it will Close and If it is Close the Drawer will Open.

public void btnClickSideBar(View view) {

                if (drawerLayout.isDrawerOpen(drawerContainer)) {
                    drawerLayout.closeDrawers();
                } else {
                    drawerLayout.openDrawer(drawerContainer);
                }
            }

Upvotes: 1

Eugene H
Eugene H

Reputation: 3568

Here is how I handle opening and closing of the NavigationDrawer. Just call handleNavDrawer() where ever you want to open or close it.

Handling open and close of the drawer

public void handleNavDrawer() {
    if (mNavigationDrawer.isDrawerOpen(GravityCompat.START)) {
        mNavigationDrawer.closeDrawer(GravityCompat.START);
    } else {
        mNavigationDrawer.openDrawer(GravityCompat.START);
    }
}

Working Example

public class MainActivity extends AppCompatActivity {

    private DrawerLayout mNavigationDrawer;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_tracker);
        mNavigationDrawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if (id == R.id.action_search) { 
            handleNavDrawer();
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    public void handleNavDrawer() {
        if (mNavigationDrawer.isDrawerOpen(GravityCompat.START)) {
            mNavigationDrawer.closeDrawer(GravityCompat.START);
        } else {
            mNavigationDrawer.openDrawer(GravityCompat.START);
        }
    }
}

Update with your example

public class First_page extends AppCompatActivity implements FragmentDrawer.FragmentDrawerListener  {

    Button go_layout;
    private Toolbar toolbar;
    private FragmentDrawer drawerFragment;
    private DrawerLayout mNavigationDrawer;

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

        toolbar = (Toolbar)findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayShowTitleEnabled(false);
        getSupportActionBar().setHomeButtonEnabled(true);
        getSupportActionBar().setDisplayUseLogoEnabled(true);
        getSupportActionBar().setLogo(R.drawable.page_logo_2);

        go_layout = (Button)findViewById(R.id.go_to_page);
        go_layout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(First_page.this, Full_page.class);
                startActivity(intent);

            }
        });
        mNavigationDrawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawerFragment = (FragmentDrawer) getSupportFragmentManager().findFragmentById(R.id.fragment_navigation_drawer);
        drawerFragment.setUp(R.id.fragment_navigation_drawer, mNavigationDrawer, toolbar);
        drawerFragment.setDrawerListener(this);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }


    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if (id == R.id.right_btn) {
            Toast.makeText(First_page.this, "Right_btn clicked", Toast.LENGTH_LONG).show();
            handleNavDrawer();
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onDrawerItemSelected(View view, int position) {
    // Close the Nav Drawer
    // handleNavDrawer();
    }

    public void handleNavDrawer() {
        if (mNavigationDrawer.isDrawerOpen(GravityCompat.START)) {
            mNavigationDrawer.closeDrawer(GravityCompat.START);
        } else {
            mNavigationDrawer.openDrawer(GravityCompat.START);
        }
    }
}

Upvotes: 1

Related Questions