java - 如何在单击抽屉导航项目时显示 viewpager 的选项卡而不重叠?

标签 java android android-fragments android-viewpager navigation-drawer

enter image description here我的应用程序中有三个 fragment 。我成功地在选项卡中显示了它们。现在我想在单击 navigationdrawer item1 时显示 tab1 的 fragment ,其余部分相同。但是存在重叠问题。任何人都可以指导我获取解决这个问题吗?

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>

最佳答案

您使用 FragmentTransaction 有什么原因吗?你可以打电话

viewPager.setCurrentItem(0);

您传递的参数(0 或 1 或 2 或...)基于您在导航 View 中单击的操作。当 ViewPager 更改时,选项卡应自动更新。

关于java - 如何在单击抽屉导航项目时显示 viewpager 的选项卡而不重叠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45368305/

相关文章:

java - 在这种情况下我应该使用什么代码设计?

Java统计一个数组的所有值并将其存储在一个数组中

android - fragment 实现 OnClickListener

android - Google Cloud Messaging (GCM) - 无法实例化接收器 - java.lang.ClassNotFoundException

android - 警报管理器未触发

android - 如何将 float 操作按钮拖到 View 寻呼机上

android - 如何动态设置FrameLayout的宽度和高度android?

java - 使用 ArrayList 更新一对中的一个字段

java - 使用java在MongoDB中查找数组元素的平均值

java - 溢出菜单故障上的Android L阴影