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

时间:2015-03-24 14:22:53

标签: java android android-viewpager fragment

我正在开发一款只有activity和多个fragments的应用。 第一个fragment包含viewpager,其中fragments额外增加fragment。我可以轻松地从一个viewpager切换到另一个fragment工作正常,但当我从一个viewpager返回到第一个(viewpager)时, fragments未加载所有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); } } 。以下是代码:

mainactivity.java

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;
      }

}

firstfragment.java

     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];
    }
}

viewpageadapter.java

{{1}}

1 个答案:

答案 0 :(得分:0)

尝试使用viewPager.setAdapter(new ViewPagerAdapter(getFragmentManager()));

更改viewPager.setAdapter(new ViewPagerAdapter(getChildFragmentManager()));