0

I'm trying to combine a navigation view and page viewer. I've got that working fine, the problem I'm having is adding the drawer toggle to the action bar (or tool bar) in order to bring up the navigation drawer. I don't care if I can add the toggle to the default view pager or by implementing my own bar (you can see the commented out sections). I actually had both bars on screen at one time...this was not what I wanted. I'm just experimenting to see what's possible. Any help would be appreciated, and thanks in advance.

PagerActivity:

package valdes.navigationviewmenu;

import android.app.ActionBar;
import android.content.Intent;
import android.support.design.widget.NavigationView;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.GravityCompat;
import android.support.v4.view.ViewPager;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;

public class KioskPagerActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener{

private ViewPager viewPager;
private Question [] questions;
private DrawerLayout drawerLayout;
private ActionBarDrawerToggle actionBarDrawerToggle;
private NavigationView navigationView;
private Toolbar toolbar;

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

    //toolbar = (Toolbar) findViewById(R.id.toolbar);
    //setSupportActionBar(toolbar);
    //ActionBar bar = getActionBar();
    //bar.setDisplayHomeAsUpEnabled(true);
    //bar.setHomeButtonEnabled(true);
    drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    actionBarDrawerToggle = new ActionBarDrawerToggle(
            this, drawerLayout, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawerLayout.addDrawerListener(actionBarDrawerToggle);
    actionBarDrawerToggle.syncState();

    navigationView = (NavigationView)findViewById(R.id.nav_view);
    navigationView.setNavigationItemSelectedListener(this);


    // bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    // bar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE);

    questions = QuestionManager.getQuestions();

    viewPager = (ViewPager) findViewById(R.id.activity_question_pager);
    FragmentManager fragmentManager = getSupportFragmentManager();
    viewPager.setAdapter(new FragmentStatePagerAdapter(fragmentManager) {
        @Override
        public Fragment getItem(int position) {
            return QuestionFragment.newInstance(position);
        }

        @Override
        public int getCount() {
            return questions.length;
        }
    });
}


@Override
public void onBackPressed() {
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    if (drawer.isDrawerOpen(GravityCompat.START)) {
        drawer.closeDrawer(GravityCompat.START);
    } else {
        super.onBackPressed();
    }
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.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.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}

@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
    // Handle navigation view item clicks here.
    int id = item.getItemId();
    Intent intent;

    switch (id){
        case R.id.nav_camera:
            intent =  new Intent(this, Main2Activity.class);
            startActivity(intent);
            return true;
        case R.id.nav_gallery:
            intent = new Intent(this, KioskPagerActivity.class);
            startActivity(intent);
            return true;
    }

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    drawer.closeDrawer(GravityCompat.START);
    return true;
}

}

Corresponding XML:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start">



<android.support.v4.view.ViewPager
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/activity_question_pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

<!-- custom app bar that can be used.
<include
    layout="@layout/app_bar_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
-->

<android.support.design.widget.NavigationView
    android:id="@+id/nav_view"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:fitsSystemWindows="true"
    app:headerLayout="@layout/nav_header_main"
    app:menu="@menu/activity_main_drawer" />

</android.support.v4.widget.DrawerLayout>

I actually solved the issue with the following changes:

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_kiosk_pager);

    drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout_kiosk);
    actionBarDrawerToggle = new ActionBarDrawerToggle(
            this, drawerLayout, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawerLayout.addDrawerListener(actionBarDrawerToggle);
    actionBarDrawerToggle.syncState();

    navigationView = (NavigationView)findViewById(R.id.nav_view_kiosk);
    navigationView.setNavigationItemSelectedListener(this);

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setHomeButtonEnabled(true);

But now the toggle doesn't pull out the drawer and the drawer appears behind the action bar.... Help.

Diego
  • 117
  • 10
  • What problems are you having, exactly? – Mike M. May 11 '16 at 23:05
  • Actually, I sort of solved my issue. Now, I have the support action bar with the toggle implemented, but it doesn't seem to call the drawer and when I pull out the drawer, it appears behind the bar. – Diego May 12 '16 at 11:47
  • "the drawer appears behind the action bar" - With that layout, the drawer will be below the support `ActionBar`. If you mean you want it to open over it, you'll have to change some things. "the toggle doesn't pull out the drawer" - You need to call `actionBarDrawerToggle.onOptionsItemSelected(item)` in the `Activity`'s `onOptionsItemSelected()` method, as shown [here](http://stackoverflow.com/questions/36570450/clicking-hamburger-icon-on-toolbar-does-not-open-navigation-drawer/36570774#36570774). – Mike M. May 12 '16 at 12:01

0 Answers0