2017-07-25 2 views
1

J'ai combiné le tiroir de navigation avec la disposition des onglets. Dans cet onglet, la disposition fonctionne correctement pour trois onglets, mais le tiroir de navigation se comporte mal. L'icône du tiroir de navigation a disparu, elle s'ouvre en glissant en ne se fermant pas en glissant. Et aussi les menus dans le tiroir de navigation ne fonctionnent pas.Le tiroir de navigation ne fonctionne pas

    <?xml version="1.0" encoding="utf-8"?> 
    <android.support.v4.widget.DrawerLayoutxmlns: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"> 

<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" /> 

<LinearLayout 
    android:id="@+id/main_layout" 
    android:orientation="vertical" 
    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:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".MainActivity"> 

    <!-- our toolbar --> 
    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="?attr/colorPrimary" 
     android:minHeight="?attr/actionBarSize" 
     android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
     app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/> 

    <!-- our tablayout to display tabs --> 
    <android.support.design.widget.TabLayout 
     android:id="@+id/tabLayout" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="?attr/colorPrimary" 
     android:minHeight="?attr/actionBarSize" 
     android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/> 

    <!-- View pager to swipe views --> 
    <android.support.v4.view.ViewPager 
     android:id="@+id/pager" 
     android:layout_width="match_parent" 
     android:layout_height="fill_parent"/> 

</LinearLayout> 




public class MainActivity extends AppCompatActivity implements TabLayout.OnTabSelectedListener { 

private NavigationView navigationView; 
private DrawerLayout drawer; 
private View navHeader; 
private ImageView imgNavHeaderBg, imgProfile; 
private TextView txtName, txtWebsite; 
private Toolbar toolbar; 
private FloatingActionButton fab; 
ActionBar actionBar; 
//This is our tablayout 
private TabLayout tabLayout; 

//This is our viewPager 
private ViewPager viewPager; 

// urls to load navigation header background image 
// and profile image 
private static final String urlNavHeaderBg = "http://api.androidhive.info/images/nav-menu-header-bg.jpg"; 
private static final String urlProfileImg = "https://lh3.googleusercontent.com/eCtE_G34M9ygdkmOpYvCag1vBARCmZwnVS6rS5t4JLzJ6QgQSBquM0nuTsCpLhYbKljoyS-txg"; 

// index to identify current nav menu item 
public static int navItemIndex = 0; 

// tags used to attach the fragments 
private static final String TAG_HOME = "home"; 
private static final String TAG_PHOTOS = "photos"; 
private static final String TAG_MOVIES = "movies"; 
private static final String TAG_NOTIFICATIONS = "notifications"; 
private static final String TAG_SETTINGS = "settings"; 
public static String CURRENT_TAG = TAG_HOME; 

// toolbar titles respected to selected nav menu item 
private String[] activityTitles; 

// flag to load home fragment when user presses back key 
private boolean shouldLoadHomeFragOnBackPress = true; 
private Handler mHandler; 


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

    actionBar = getSupportActionBar(); 
    actionBar.show(); 
    toolbar = (Toolbar) findViewById(R.id.toolbar); 
    // setSupportActionBar(toolbar); 

    mHandler = new Handler(); 

    drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    navigationView = (NavigationView) findViewById(R.id.nav_view); 

    View hView = navigationView.getHeaderView(0); 

    // fab = (FloatingActionButton) findViewById(R.id.fab); 

    // Navigation view header 
    navHeader = navigationView.getHeaderView(0); 
    txtName = (TextView) navHeader.findViewById(R.id.name); 
    txtWebsite = (TextView) navHeader.findViewById(R.id.website); 
    imgNavHeaderBg = (ImageView) navHeader.findViewById(R.id.img_header_bg); 
    imgProfile = (ImageView) navHeader.findViewById(R.id.img_profile); 

    // load toolbar titles from string resources 
    activityTitles = getResources().getStringArray(R.array.nav_item_activity_titles); 

    /* fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
        .setAction("Action", null).show(); 
     } 
    });*/ 

    // load nav menu header data 
    loadNavHeader(); 

    // initializing navigation menu 
    setUpNavigationView(); 

    if (savedInstanceState == null) { 
     navItemIndex = 0; 
     CURRENT_TAG = TAG_HOME; 
     loadHomeFragment(); 
    } 

    /* 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar);*/ 


    //Initializing the tablayout 
    tabLayout = (TabLayout) findViewById(R.id.tabLayout); 

    //Adding the tabs using addTab() method 
    tabLayout.addTab(tabLayout.newTab().setText("Home")); 
    tabLayout.addTab(tabLayout.newTab().setText("Search Bride")); 
    tabLayout.addTab(tabLayout.newTab().setText("Search Groom")); 
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); 

    //Initializing viewPager 
    viewPager = (ViewPager) findViewById(R.id.pager); 

    //Creating our pager adapter 
    Pager adapter = new Pager(getSupportFragmentManager(), tabLayout.getTabCount()); 

    //Adding adapter to pager 
    viewPager.setAdapter(adapter); 

    tabLayout.setOnTabSelectedListener(this); 
    viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 


     @Override 
     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 
      tabLayout.setScrollPosition(position, positionOffset, true); 
     } 

     @Override 
     public void onPageSelected(int position) { 

     } 

     @Override 
     public void onPageScrollStateChanged(int state) { 

     } 

     //Adding onTabSelectedListener to swipe views 

     //tabLayout.setOnClickListener(); 


    }); 
} 


/*** 
* Load navigation menu header information 
* like background image, profile image 
* name, website, notifications action view (dot) 
*/ 
private void loadNavHeader() { 
    // name, website 
    txtName.setText("shubham"); 
    txtWebsite.setText("[email protected]"); 

    // loading header background image 
    Glide.with(this).load(urlNavHeaderBg) 
      .crossFade() 
      .diskCacheStrategy(DiskCacheStrategy.ALL) 
      .into(imgNavHeaderBg); 

    // Loading profile image 
    Glide.with(this).load(urlProfileImg) 
      .crossFade() 
      .thumbnail(0.5f) 
      .bitmapTransform(new CircleTransform(this)) 
      .diskCacheStrategy(DiskCacheStrategy.ALL) 
      .into(imgProfile); 

    // showing dot next to notifications label 
    navigationView.getMenu().getItem(3).setActionView(R.layout.menu_dot); 
} 

/*** 
* Returns respected fragment that user 
* selected from navigation menu 
*/ 
private void loadHomeFragment() { 
    // selecting appropriate nav menu item 
    selectNavMenu(); 

    // set toolbar title 
    setToolbarTitle(); 

    // if user select the current navigation menu again, don't do anything 
    // just close the navigation drawer 
    if (getSupportFragmentManager().findFragmentByTag(CURRENT_TAG) != null) { 
     drawer.closeDrawers(); 

     // show or hide the fab button 
     //toggleFab(); 
     return; 
    } 

    // Sometimes, when fragment has huge data, screen seems hanging 
    // when switching between navigation menus 
    // So using runnable, the fragment is loaded with cross fade effect 
    // This effect can be seen in GMail app 
    Runnable mPendingRunnable = new Runnable() { 
     @Override 
     public void run() { 
      // update the main content by replacing fragments 
      HomeFragment fragment = getHomeFragment(); 
      FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
      fragmentTransaction.setCustomAnimations(android.R.anim.fade_in, 
        android.R.anim.fade_out); 
      // FragmentTransaction replace = fragmentTransaction.replace(R.id.frame, fragment, CURRENT_TAG); 
      fragmentTransaction.commitAllowingStateLoss(); 
     } 
    }; 

    // If mPendingRunnable is not null, then add to the message queue 
    if (mPendingRunnable != null) { 
     mHandler.post(mPendingRunnable); 
    } 

    // show or hide the fab button 
    // toggleFab(); 

    //Closing drawer on item click 
    drawer.closeDrawers(); 

    // refresh toolbar menu 
    invalidateOptionsMenu(); 
} 

private HomeFragment getHomeFragment() { 
    switch (navItemIndex) { 
     case 0: 
      // home 
      HomeFragment homeFragment = new HomeFragment(); 
      return homeFragment; 
     case 1: 
      // photos 
      PhotosFragment photosFragment = new PhotosFragment(); 
      return photosFragment; 
     case 2: 
      // movies fragment 
      MoviesFragment moviesFragment = new MoviesFragment(); 
      return moviesFragment; 
     case 3: 
      // notifications fragment 
      NotificationFragment notificationsFragment = new NotificationFragment(); 
      return notificationsFragment; 

     case 4: 
      // settings fragment 
      SettingsFragment settingsFragment = new SettingsFragment(); 
      return settingsFragment; 
     default: 
      return new HomeFragment(); 
    } 
} 

private void setToolbarTitle() { 
    getSupportActionBar().setTitle(activityTitles[navItemIndex]); 
} 

private void selectNavMenu() { 
    navigationView.getMenu().getItem(navItemIndex).setChecked(true); 
} 

private void setUpNavigationView() { 
    //Setting Navigation View Item Selected Listener to handle the item click of the navigation menu 
    navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { 

     // This method will trigger on item Click of navigation menu 
     @Override 
     public boolean onNavigationItemSelected(MenuItem menuItem) { 

      //Check to see which item was being clicked and perform appropriate action 
      switch (menuItem.getItemId()) { 
       //Replacing the main content with ContentFragment Which is our Inbox View; 
       case R.id.nav_home: 
        navItemIndex = 0; 
        CURRENT_TAG = TAG_HOME; 
        break; 
       case R.id.nav_photos: 
        navItemIndex = 1; 
        CURRENT_TAG = TAG_PHOTOS; 
        break; 
       case R.id.nav_movies: 
        navItemIndex = 2; 
        CURRENT_TAG = TAG_MOVIES; 
        break; 
       case R.id.nav_notifications: 
        navItemIndex = 3; 
        CURRENT_TAG = TAG_NOTIFICATIONS; 
        break; 
       case R.id.nav_settings: 
        navItemIndex = 4; 
        CURRENT_TAG = TAG_SETTINGS; 
        break; 
       case R.id.nav_about_us: 
        // launch new intent instead of loading fragment 
        startActivity(new Intent(MainActivity.this, AboutUsActivity.class)); 
        drawer.closeDrawers(); 
        return true; 
       case R.id.nav_privacy_policy: 
        // launch new intent instead of loading fragment 
        startActivity(new Intent(MainActivity.this, PrivacyPolicyActivity.class)); 
        drawer.closeDrawers(); 
        return true; 
       default: 
        navItemIndex = 0; 
      } 

      //Checking if the item is in checked state or not, if not make it in checked state 
      if (menuItem.isChecked()) { 
       menuItem.setChecked(false); 
      } else { 
       menuItem.setChecked(true); 
      } 
      menuItem.setChecked(true); 

      loadHomeFragment(); 

      return true; 
     } 
    }); 


    ActionBarDrawerToggle actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawer,toolbar, R.string.openDrawer, R.string.closeDrawer) { 

     @Override 
     public void onDrawerClosed(View drawerView) { 
      // Code here will be triggered once the drawer closes as we dont want anything to happen so we leave this blank 
      super.onDrawerClosed(drawerView); 
     } 

     @Override 
     public void onDrawerOpened(View drawerView) { 
      // Code here will be triggered once the drawer open as we dont want anything to happen so we leave this blank 
      super.onDrawerOpened(drawerView); 
     } 
    }; 

    //Setting the actionbarToggle to drawer layout 
    drawer.setDrawerListener(actionBarDrawerToggle); 

    //calling sync state is necessary or else your hamburger icon wont show up 
    actionBarDrawerToggle.syncState(); 
} 


@Override 
public void onBackPressed() { 
    if (drawer.isDrawerOpen(GravityCompat.START)) { 
     drawer.closeDrawers(); 
     return; 
    } 

    // This code loads home fragment when back key is pressed 
    // when user is in other fragment than home 
    if (shouldLoadHomeFragOnBackPress) { 
     // checking if user is on other navigation menu 
     // rather than home 
     if (navItemIndex != 0) { 
      navItemIndex = 0; 
      CURRENT_TAG = TAG_HOME; 
      loadHomeFragment(); 
      return; 
     } 
    } 

    super.onBackPressed(); 
} 

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

    // show menu only when home fragment is selected 
    if (navItemIndex == 0) { 
     getMenuInflater().inflate(R.menu.main, menu); 
    } 

    // when fragment is notifications, load the menu created for notifications 
    if (navItemIndex == 3) { 
     getMenuInflater().inflate(R.menu.notifications, 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_logout) { 
     Toast.makeText(getApplicationContext(), "Logout user!", Toast.LENGTH_LONG).show(); 
     return true; 
    } 

    // user is in notifications fragment 
    // and selected 'Mark all as Read' 
    if (id == R.id.action_mark_all_read) { 
     Toast.makeText(getApplicationContext(), "All notifications marked as read!", Toast.LENGTH_LONG).show(); 
    } 



    // user is in notifications fragment 
    // and selected 'Clear All' 
    if (id == R.id.action_clear_notifications) { 
     Toast.makeText(getApplicationContext(), "Clear all notifications!", Toast.LENGTH_LONG).show(); 
    } 

    return super.onOptionsItemSelected(item); 
} 

// show or hide the fab 





@Override 
public void onTabSelected(TabLayout.Tab tab) { 

    viewPager.setCurrentItem(tab.getPosition()); 

} 

@Override 
public void onTabUnselected(TabLayout.Tab tab) { 


} 

@Override 
public void onTabReselected(TabLayout.Tab tab) { 

} 
+1

envoyer votre code xml – MinnuKaAnae

+0

plz vérifier le xml fourni. –

Répondre

0

Salut s'il vous plaît suivre cet ordre pour les onglets avec tiroir de navigation

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

    <android.support.design.widget.CoordinatorLayout 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/main_content" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:fitsSystemWindows="true" 
     android:background="#ffffff"> 
      <RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 

      <android.support.design.widget.AppBarLayout 
       android:id="@+id/appbar" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:paddingTop="@dimen/appbar_padding_top" 
       android:theme="@style/MainTheme.AppBarOverlay"> 
       <android.support.v7.widget.Toolbar 
        android:id="@+id/toolbar" 
        android:layout_width="match_parent" 
        android:layout_height="?attr/actionBarSize" 
        android:background="?attr/colorPrimary" 
        app:layout_scrollFlags="scroll|enterAlways" 
        app:popupTheme="@style/MainTheme.PopupOverlay"/> 
      <android.support.design.widget.TabLayout 
      android:id="@+id/tabLayout" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:background="?attr/colorPrimary" 
      android:minHeight="?attr/actionBarSize" 
      android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/> 
     </android.support.design.widget.AppBarLayout> 
      <!-- View pager to swipe views --> 
      <android.support.v4.view.ViewPager 
      android:id="@+id/pager" 
      android:layout_width="match_parent" 
      android:layout_height="fill_parent"/> 
     </RelativeLayout> 
      <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> 
+0

Merci MinnuKaAnae pour votre aide./\ –

+0

Si cela vous a aidé, acceptez ma réponse, merci – MinnuKaAnae