Java 从片段返回到具有viewpager的上一个片段

Java 从片段返回到具有viewpager的上一个片段,java,android,android-viewpager,fragment,Java,Android,Android Viewpager,Fragment,我正在开发一个应用程序,它有一个活动和几个片段。 第一个片段包含一个查看页面,其中包含3-4个片段额外的。我可以轻松地从一个片段切换到另一个viewpager工作正常,但是当我从一个fragment返回到第一个viewpager时,viewpager不会加载所有片段。代码如下: mainactivity.java public class MainActivity extends ActionBarActivity implements View.OnClickListener { p

我正在开发一个应用程序,它有一个
活动
和几个
片段
。 第一个
片段
包含一个
查看页面
,其中包含3-4个
片段
额外的。我可以轻松地从一个
片段切换到另一个
viewpager
工作正常,但是当我从一个
fragment
返回到第一个
viewpager
时,
viewpager
不会加载所有
片段。代码如下:

mainactivity.java

public class MainActivity extends ActionBarActivity implements View.OnClickListener {

    private String[] mOptionMenu;
    private DrawerLayout mDrawerLayout;
    private DrawerLayout loginlayout;
    private RelativeLayout mDrawerRelativeLayout;
    private ListView mDrawerList;
    private ActionBarDrawerToggle mDrawerToggle;

    private CharSequence mTitleSection;
    private CharSequence mTitleApp;
    private Fragment mFragment = null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button btn1= (Button) findViewById(R.id.button1);
        Button btn2= (Button) findViewById(R.id.button2);
        Button login= (Button) findViewById(R.id.login);
        Button about= (Button) findViewById(R.id.about);
        about.setOnClickListener(this);
        login.setOnClickListener(this);
        btn2.setOnClickListener(this);
        btn1.setOnClickListener(this);
        FontChangeCrawler fontChanger = new FontChangeCrawler(getAssets(), "fonts/font.ttf");
        fontChanger.replaceFonts((ViewGroup)this.findViewById(android.R.id.content));
        if (findViewById(R.id.content_frame) != null) {
            if (savedInstanceState != null) {
                return;
            }
            FirstFragment firstFragment = new FirstFragment();
            firstFragment.setArguments(getIntent().getExtras());
            getSupportFragmentManager().beginTransaction().addToBackStack(null)
                    .add(R.id.content_frame, firstFragment).commit();

        }

        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        mDrawerRelativeLayout = (RelativeLayout) findViewById(R.id.left_drawer);
        mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
                R.drawable.ic_drawer, R.string.drawer_open,
                R.string.drawer_close) {

            public void onDrawerClosed(View view) {
                getSupportActionBar().setTitle(mTitleSection);
                ActivityCompat.invalidateOptionsMenu(MainActivity.this);
            }

            public void onDrawerOpened(View drawerView) {

                getSupportActionBar().setTitle(mTitleSection);
                ActivityCompat.invalidateOptionsMenu(MainActivity.this);

            }
        };
        mDrawerLayout.setDrawerListener(mDrawerToggle);

        getSupportActionBar().setCustomView(R.layout.actionbar_image);
        getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME
                | ActionBar.DISPLAY_SHOW_CUSTOM);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowTitleEnabled(false);
        getSupportActionBar().setHomeButtonEnabled(true);
        getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#662e91")));
        mDrawerLayout.setDrawerListener(new DrawerLayout.DrawerListener() {
            @Override
            public void onDrawerSlide(View drawerView, float slideOffset) {

            }

            @Override
            public void onDrawerOpened(View drawerView) {

            }

            @Override
            public void onDrawerClosed(View drawerView) {

            }

            @Override
            public void onDrawerStateChanged(int newState) {

            }
        });

    }

    @Override
    public void onClick(View v) {
            switch(v.getId())
            {
                case R.id.button1:
                    FirstFragment firstFragment = new FirstFragment();
                    getSupportFragmentManager().beginTransaction().replace(R.id.content_frame, new FirstFragment()).commit();
                    mDrawerLayout.closeDrawer(Gravity.LEFT);
                    break;

                case R.id.login:
                    callLoginDialog();
                    break;
                case R.id.about:
                    about abt = new about();
                    abt.setArguments(getIntent().getExtras());
                    getSupportFragmentManager().beginTransaction()
                            .add(R.id.content_frame, abt).commit();
                    mDrawerLayout.closeDrawer(Gravity.LEFT);
                    break;

            }
    }

    public class FontChangeCrawler
    {
        private Typeface typeface;

        public FontChangeCrawler(Typeface typeface)
        {
            this.typeface = typeface;
        }

        public FontChangeCrawler(AssetManager assets, String assetsFontFileName)
        {
            typeface = Typeface.createFromAsset(assets, "fonts/font.ttf");
        }

        public void replaceFonts(ViewGroup viewTree)
        {
            View child;
            for(int i = 0; i < viewTree.getChildCount(); ++i)
            {
                child = viewTree.getChildAt(i);
                if(child instanceof ViewGroup)
                {
                    // recursive call
                    replaceFonts((ViewGroup)child);
                }
                else if(child instanceof TextView)
                {
                    // base case
                    ((TextView) child).setTypeface(typeface);
                }
            }
        }
    }
    public void callLoginDialog()
    {
        Dialog myDialog = new Dialog(this);
        myDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        myDialog.setContentView(R.layout.loginwindow);

        myDialog.setCancelable(false);
        TextView reg= (TextView) myDialog.findViewById(R.id.register);
        Button login = (Button) myDialog.findViewById(R.id.login);

        EditText emailaddr = (EditText) myDialog.findViewById(R.id.editText2);
        EditText password = (EditText) myDialog.findViewById(R.id.editText3);
        myDialog.show();
        reg.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(getApplicationContext(), "Register",
                        Toast.LENGTH_LONG).show();
            }
        });
       login.setOnClickListener(new View.OnClickListener()
        {

            @Override
            public void onClick(View v)
            {

                //your login calculation goes here
            }
        });
        myDialog.setOnKeyListener(new DialogInterface.OnKeyListener() {
            @Override
            public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
                if (keyCode == KeyEvent.KEYCODE_BACK) {
                    dialog.cancel();
                    return true;
                }
                return false;
            }
        });


    }

    @Override
    public void onBackPressed() {
        if(mDrawerLayout.isDrawerOpen(Gravity.LEFT)) {
            mDrawerLayout.closeDrawer(Gravity.LEFT);
        }
        else {
            super.onBackPressed();
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main, menu);
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        if (mDrawerToggle.onOptionsItemSelected(item)) {
            return true;
        }

        switch (item.getItemId()) {
        case R.id.user:

            mDrawerLayout.closeDrawer(Gravity.LEFT);
            break;
        default:
            return super.onOptionsItemSelected(item);
        }

        return true;
    }

    @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        mDrawerToggle.syncState();
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        mDrawerToggle.onConfigurationChanged(newConfig);
    }

}

尝试更改
viewPager.setAdapter(新的ViewPagerAdapter(getFragmentManager())viewPager.setAdapter(新的ViewPagerAdapter(getChildFragmentManager()))进行编码>

不客气:)如果您认为此答案有用,请将其标记为正确答案。
public class FirstFragment extends Fragment {
    public ViewPager viewPager;

    @Override
          public View onCreateView(LayoutInflater inflater, ViewGroup container,
              Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_first,
            container, false);
        viewPager = (ViewPager) rootView.findViewById(pager);
        viewPager.setAdapter(new ViewPagerAdapter(getFragmentManager()));
        viewPager.setCurrentItem(0);
        PagerTitleStrip pagerTitleStrip= (PagerTitleStrip) rootView.findViewById(R.id.titlestrip);
        pagerTitleStrip.setNonPrimaryAlpha(Float.parseFloat("0.3"));
        viewPager.setPageTransformer(true, new ViewPager.PageTransformer() {
            @Override
            public void transformPage(View view, float position) {

                final float normalizedposition = Math.abs(Math.abs(position) - 1);
                view.setAlpha(normalizedposition);
            }
        });
        Typeface font = Typeface.createFromAsset(getActivity().getAssets(), "fonts/font.ttf");
        for (int counter = 0 ; counter<pagerTitleStrip.getChildCount(); counter++) {

            if (pagerTitleStrip.getChildAt(counter) instanceof TextView) {
                ((TextView)pagerTitleStrip.getChildAt(counter)).setTypeface(font);
            }
        }

        return rootView;
      }

}
     public class ViewPagerAdapter extends FragmentPagerAdapter {


    final int PAGE_COUNT = 4;
    // Tab Titles
    private String tabtitles[] = new String[] { "Home", "Men", "Women", "Children" };
    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:
                SecondFragment fragmenttab1 = new SecondFragment();
                return fragmenttab1;

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

            case 2:
                Fourthfragment fragmenttab3 = new Fourthfragment();
                return fragmenttab3;
            case 3:
                FifthFragment fragmenttab4 = new FifthFragment();
                return fragmenttab4;
        }
        return null;
    }


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