NavigationDrawer中PagerSlidingTabStrip的奇怪行为

时间:2015-03-22 11:50:08

标签: android navigation-drawer fragmentpageradapter pagerslidingtabstrip

当活动开始时,它会加载NavigationDrawer,里面有3个部分。 1st有一个可正常工作的RecyclerView。第二个有PagerSlidingTabStrip有问题。 3rd有一些代码可以改变PreferenceManager并且运行良好。

现在问题是getItem()的{​​{1}}方法只被调用一次,即。这是我第一次单击CustomPagerAdapter中的用户部分,但在我尝试再次打开后导航时NavigationDrawer未被调用,因此getItem()内没有任何内容初始化。

然后我要重新打开该应用,ViewPager将会工作一次。

请指导我。可能是什么问题?

更新 我做了一些测试,发现PagerSlidingTabStrip的{​​{1}}仅在我第一次启动第2节时被调用一次,然后当我再次尝试启动它时,它没有被调用。为什么这样?

NavigationDrawer部分:

getItem()

第二部分 - UserFragment:

FragmentPagerAdapter

FragmentPagerAdapter - CustomAdapter:

    @Override
    public void onNavigationDrawerItemSelected(int position) {
        // update the main content by replacing fragments
        FragmentManager fragmentManager = getFragmentManager();
        switch(position) {
            case 0: //Events
                fragmentManager.beginTransaction().replace(R.id.container,
                        EventsRecyclerViewFragment.newInstance(position + 1))
                        .addToBackStack(null).commit();
                break;

            case 1: //User
                fragmentManager.beginTransaction().replace(R.id.container,
                        UserFragment.newInstance(position + 1))
                        .addToBackStack(null).commit();
                break;

            case 2: //Logout
                prefs = PreferenceManager.getDefaultSharedPreferences(this);
                if(prefs.getBoolean(KEY_LOGIN, false)) {
                    prefs.edit().remove(KEY_LOGIN).apply();
                    prefs.edit().remove(KEY_USERNAME).apply();
                    prefs.edit().remove(KEY_PASSWORD).apply();
                    Intent intent = getIntent();
                    intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
                    finish();
                    startActivity(intent);
                    Customs.mToast(getBaseContext(), "Logged-out");
                }
                break;
        }
}

NavigationDrawer:

NavigationDrawer

第一次从NavigaiontDrawer打开用户:

1st time opened User from NavigaiontDrawer

第二次从NavigaiontDrawer打开用户:

2nd time opened User from NavigaiontDrawer

1 个答案:

答案 0 :(得分:0)

好的,问题解决了。我刚刚从FragmentPagerAdapter更改为FragmentStatePagerAdapter

FragmentPagerAdapter的问题在于它只创建Fragments一次,并在下次恢复它时。这应该工作得很好但是我再次NavigationDrawer Pager以上{{1}}层,所以当我从NavigationDrawer更改了部分时,一些东西搞砸了,FragmentPagerAdapter也没有抓取碎片也没有创造新的。