0

enter image description here Il ya trois fragments dans mon application.Je les ai montrés dans les onglets avec succès.Maintenant je veux montrer le fragment de tab1 sur le clic de navigationdrawer item1 et même pour le reste.Mais il y a un problème de chevauchement.Peut-être un guide moi de me débarrasser de ce problème?comment afficher l'onglet de pager de vue sur le clic de l'élément de tiroir de navigation sans chevauchement?

MainActivity.java

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

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

    // Set the ViewPagerAdapter into ViewPager 
    viewPager.setAdapter(new ViewPagerAdapter(getSupportFragmentManager())); 

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
      this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
    drawer.setDrawerListener(toggle); 
    toggle.syncState(); 

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

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




@SuppressWarnings("StatementWithEmptyBody") 
@Override 
public boolean onNavigationItemSelected(MenuItem item) { 
    FragmentManager fragmentManager = getSupportFragmentManager(); 
    FragmentTransaction fragmentTransaction = 
    fragmentManager.beginTransaction(); 
    // Handle navigation view item clicks here. 
    int id = item.getItemId(); 

    if (id == R.id.nav_camera) { 
     fragmentOne f1 = new fragmentOne(); 
     fragmentTransaction.replace(R.id.fragment_container,f1); 
     fragmentTransaction.addToBackStack(null); 
     fragmentTransaction.commit(); 
     getSupportActionBar().setTitle("Camera"); 

    } else if (id == R.id.nav_gallery) { 
     fragmentTwo f2 = new fragmentTwo(); 
     fragmentTransaction.replace(R.id.fragment_container,f2); 
     fragmentTransaction.addToBackStack(null); 
     fragmentTransaction.commit(); 
     getSupportActionBar().setTitle("Gallery"); 

    } else if (id == R.id.nav_slideshow) { 
    MenuFragment f3 = new MenuFragment(); 
     fragmentTransaction.replace(R.id.fragment_container,f3); 
     fragmentTransaction.addToBackStack(null); 
     fragmentTransaction.commit(); 
     getSupportActionBar().setTitle("List"); 

    } else if (id == R.id.nav_manage) { 

    } else if (id == R.id.nav_share) { 

    } else if (id == R.id.nav_send) { 

    } 

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

FragmentOne.java

public class fragmentOne extends Fragment { 
TextView t1; 
public fragmentOne(){ 

} 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 

    return inflater.inflate(R.layout.fragment_one_layout,container, false); 
} 
} 

ViewPagerAdapter.java

public class ViewPagerAdapter extends FragmentPagerAdapter { 

final int PAGE_COUNT = 3; 
// Tab Titles 
private String tabtitles[] = new String[] { "Tab1", "Tab2", "Tab3" }; 
Context context; 

public ViewPagerAdapter(FragmentManager fm) { 
    super(fm); 
} 

@Override 
public int getCount() { 
    return PAGE_COUNT; 
} 

@Override 
public Fragment getItem(int position) { 
    switch (position) { 

     // Open FragmentTab1.java 
     case 0: 
      fragmentOne fragmenttab1 = new fragmentOne(); 
      return fragmenttab1; 

     // Open FragmentTab2.java 
     case 1: 
      fragmentTwo fragmenttab2 = new fragmentTwo(); 
      return fragmenttab2; 

     // Open FragmentTab3.java 
     case 2: 
      MenuFragment fragmenttab3 = new MenuFragment(); 
      return fragmenttab3; 
    } 
    return null; 
} 

@Override 
public CharSequence getPageTitle(int position) { 
    return tabtitles[position]; 
} 
} 

MainActivity.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 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/content_main" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
app:layout_behavior="@string/appbar_scrolling_view_behavior" 
tools:context="com.example.chaitanya.navbar.MainActivity" 
tools:showIn="@layout/app_bar_main"> 
<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/pager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <android.support.v4.view.PagerTabStrip 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="top" 
     android:paddingBottom="10dp" 
     android:paddingTop="10dp" 
     android:textColor="#000000" /> 

</android.support.v4.view.ViewPager> 

<RelativeLayout 

    android:id="@+id/fragment_container" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center|center_horizontal" 
    ></RelativeLayout> 

+0

Qu'entendez-vous par chevauchement? –

Répondre

1

Y a-t-il une raison pour laquelle vous utilisez un FragmentTransaction? Vous pouvez appeler

viewPager.setCurrentItem(0); 

L'argument que vous passez (0 ou 1 ou 2 ou ...) est basé sur l'action que vous cliquez dans le NavigationView. Les onglets doivent être mis à jour automatiquement lorsque ViewPager est modifié.

+0

Si je supprime la fragmentation, puis sur backpress cela mettra fin à mon application? Je pensais qu'il gardera trace du fragment précédent. –

+2

Dans un viewpager, il n'est pas attendu que le comportement passe à un autre onglet lorsque vous appuyez sur précédent. Si c'est vraiment ce que vous voulez, vous pourriez peut-être enregistrer les positions précédemment sélectionnées dans une pile et changer l'élément actuel dans onBackPressed. Cependant, gardez à l'esprit que votre utilisateur ne s'attend pas à ce genre de comportement. –