片段导航出现问题。单击我的第二​​个片段,它仍然显示我的第一个片段选项卡

时间:2019-06-19 13:08:44

标签: android android-fragments

我正在尝试一个片段导航抽屉,一切正常,但是问题是我不想在第二个片段上放置一个片段工厂。

我非常感谢您提供的帮助。谢谢!

我将留下结果的图像,所以可能更容易理解我的意思

https://imgur.com/a/9U4aGDF

Homepage.java

public class Homepage extends AppCompatActivity implements 
NavigationView.OnNavigationItemSelectedListener {

private static final String TAG = "Homepage";

private SectionsPageAdapter mSectionsPageAdapter;

private ViewPager mViewPager;

private DrawerLayout drawer;


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

    mSectionsPageAdapter = new 
SectionsPageAdapter(getSupportFragmentManager());

    // Set up the ViewPager with the sections adapter.
    mViewPager = (ViewPager) findViewById(R.id.viewpagers);
    setupViewPager(mViewPager);
    Log.i("viewpager",mViewPager.toString());
    TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
    tabLayout.setupWithViewPager(mViewPager);


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

    drawer = findViewById(R.id.drawer_layout);
    NavigationView navigationview = findViewById(R.id.nav_view);
    navigationview.setNavigationItemSelectedListener(this);

    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, 
 toolbar,
            R.string.navigation_drawer_open, 
 R.string.navigation_drawer_close);
    drawer.addDrawerListener(toggle);
    toggle.syncState();

    if (savedInstanceState == null) {
        getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                new HomeFragment()).commit();
        navigationview.setCheckedItem(R.id.nav_home);
    }

}

private void setupViewPager(ViewPager viewPager) {
    SectionsPageAdapter adapter = new SectionsPageAdapter(getSupportFragmentManager());
    adapter.addFragment(new FragmentPopular(), "Popular");
    adapter.addFragment(new FragmentUpcoming(), "Upcoming");
    Log.i("adaptaerrrrr",adapter.toString());
    viewPager.setAdapter(adapter);
}


@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
    Fragment fragment = null;
    switch (menuItem.getItemId()) {
        case R.id.nav_home:
            fragment = new HomeFragment();
            break;
        case R.id.nav_profile:
            fragment = new ProfileFragment();
            break;
        case R.id.nav_discussion:
            fragment = new DiscussionFragment();
            break;
    }
    getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, fragment).commit();
    drawer.closeDrawer(GravityCompat.START);

    return true;
}

@Override
public void onBackPressed() {
    if (drawer.isDrawerOpen(GravityCompat.START)) {
        drawer.closeDrawer(GravityCompat.START);
    } else {
    }
    super.onBackPressed();
}


}

SectionsPageAdapter.java

public class SectionsPageAdapter extends FragmentPagerAdapter {

private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();

public void addFragment(Fragment fm, String title) {
    mFragmentList.add(fm);
    mFragmentTitleList.add(title);
}

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

@Override
public Fragment getItem(int position) {
    return mFragmentList.get(position);
}

@Override
public CharSequence getPageTitle(int position) {

    switch (position) {
        case 0:
            return "Popular Games";
        case 1 :
            return "Upcoming Games";
    }
    return null;
}
@Override
public int getCount() {
    return mFragmentList.size();
}
}

activity_homepage.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:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/drawer_layout"
android:fitsSystemWindows="true"
tools:context=".Activities.Homepage"
android:background="#000000"
tools:openDrawer="start">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <android.support.v7.widget.Toolbar
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"

  android:background="@color/common_google_signin_btn_text_dark_focused"
        android:id="@+id/toolbar"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Dark"
        android:elevation="4dp"/>

    <android.support.design.widget.TabLayout
        android:id="@+id/tabs"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="?attr/colorPrimary" />

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpagers"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

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


    <FrameLayout
        android:id="@+id/fragment_container"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">


    </FrameLayout>

</LinearLayout>

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

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

profileFragment.java

public class ProfileFragment extends Fragment {

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable 
ViewGroup container, @Nullable Bundle savedInstanceState) {

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


}
}

fragment_profile.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#FFF"
android:clickable="true">


<TextView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:text ="Profile Fragment"
    android:textSize="30sp"
    android:layout_centerInParent="true"/>



 </RelativeLayout>

1 个答案:

答案 0 :(得分:1)

getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,fragment).commit();

在onNavigationItemSelectedMethod中的break语句之前粘贴此代码。

您必须将片段附加到活动上。