2015-08-09 104 views
0

android開發人員請幫忙,我有片段viewpager,當我滑動頁面,併到達最後一頁,然後當我再次返回到第一頁時,第一頁的片段加載其默認display.Please help..here是我在MainActivityViewPager和Android工作室片段

代碼
public class MainActivity extends AppCompatActivity { 

    private ActionBarDrawerToggle actionBarDrawerToggle; 
    private DrawerLayout drawerLayout; 
    private ListView navList; 
    private FragmentManager fragmentManager; 
    private FragmentTransaction fragmentTransaction; 
    private ActionBar actionBar; 
    private ViewPager pager; 
    private Menu menu; 
    private float lastTranslate = 0.0f; 
    private FrameLayout mainframe, galleryframe; 
    private Frag_Gallery fragGallery; 
    private Frag_Create fragCreate; 
    private Frag_Account fragAccount; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     pager = (ViewPager) findViewById(R.id.viewPager); 
     mainframe = (FrameLayout) findViewById(R.id.fragmentholder); 
     galleryframe = (FrameLayout) findViewById(R.id.galleryholder); 
     pager.setAdapter(new MyPagerAdapter(getSupportFragmentManager())); 
     ColorDrawable colorDrawable = new ColorDrawable(Color.parseColor("#0b115e")); 
     Main_Menu Menu_data[] = new Main_Menu[] 
       { 
         new Main_Menu(R.mipmap.gallery_icon, "Gallery"), 
         new Main_Menu(R.mipmap.create_icon, "Create Your Own"), 
         new Main_Menu(R.mipmap.account_icon, "My Account"), 
         new Main_Menu(R.mipmap.contact_icon, "Contact Us") 
       }; 
     MainMenuAdapter adapter = new MainMenuAdapter(this, 
       R.layout.listviewmain_item_row, Menu_data); 

     drawerLayout = (DrawerLayout) findViewById(R.id.drawerlayout); 
     navList = (ListView) findViewById(R.id.navList); 

     View header = (View) getLayoutInflater().inflate(R.layout.listviewmain_header_row, null); 

     navList.addHeaderView(header); 

     navList.setAdapter(adapter); 
     navList.setDivider(null); 
     navList.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 
     navList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

       loadSelection(position); 
       drawerLayout.closeDrawer(navList); 
      } 
     }); 

     actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.opendrawer, R.string.closedrawer); 
     drawerLayout.setDrawerListener(actionBarDrawerToggle); 

     actionBar = getSupportActionBar(); 
     actionBar.setDisplayShowHomeEnabled(true); 
     actionBar.setDisplayHomeAsUpEnabled(true); 
     actionBar.setBackgroundDrawable(colorDrawable); 

     actionBar.setTitle(""); 

     fragmentManager = getSupportFragmentManager(); 
     loadSelection(0); 
     pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
      @Override 
      public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

      } 

      @Override 
      public void onPageSelected(int pos) { 
       switch (pos) { 
        case 0: 
         menu.getItem(0).setIcon(R.mipmap.gallery_icon); 
         menu.getItem(1).setIcon(R.mipmap.create_icon_off); 
         menu.getItem(2).setIcon(R.mipmap.account_icon_off); 
         break; 
        case 1: 
         menu.getItem(0).setIcon(R.mipmap.gallery_icon_off); 
         menu.getItem(1).setIcon(R.mipmap.create_icon); 
         menu.getItem(2).setIcon(R.mipmap.account_icon_off); 
         break; 
        case 2: 
         menu.getItem(0).setIcon(R.mipmap.gallery_icon_off); 
         menu.getItem(1).setIcon(R.mipmap.create_icon_off); 
         menu.getItem(2).setIcon(R.mipmap.account_icon); 
         break; 

       } 

      } 

      @Override 
      public void onPageScrollStateChanged(int state) { 

      } 
     }); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     this.menu = menu; 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     menu.getItem(0).setIcon(R.mipmap.gallery_icon); 
     menu.getItem(1).setIcon(R.mipmap.create_icon_off); 
     menu.getItem(2).setIcon(R.mipmap.account_icon_off); 
     return true; 
    } 

    private void loadSelection(int i) { 

     switch (i) { 
      case 1: 
       actionBar.setTitle("Gallery"); 
       pager.setCurrentItem(0, true); 
       break; 
      case 2: 
       actionBar.setTitle("Design"); 
       pager.setCurrentItem(1, true); 
       break; 
      case 3: 
       actionBar.setTitle("Account"); 
       pager.setCurrentItem(2, true); 
       break; 
      case 4: 
       actionBar.setTitle("Contact us"); 
       break; 
      default: 
       actionBar.setTitle(""); 
       break; 
     } 
    } 

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

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == android.R.id.home) { 
      if (drawerLayout.isDrawerOpen(navList)) { 
       drawerLayout.closeDrawer(navList); 
      } else { 
       drawerLayout.openDrawer(navList); 
      } 
     } 

     return super.onOptionsItemSelected(item); 
    } 

    private class MyPagerAdapter extends FragmentPagerAdapter { 

     private Fragment fragment; 

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

     @Override 
     public Fragment getItem(int pos) { 

      fragment = new Fragment(); 
      switch (pos) { 
       case 0: 
        fragment = new Frag_Gallery(); 
        break; 
       case 1: 
        fragment = new Frag_Create(); 
        break; 
       case 2: 
        fragment = new Frag_Account(); 
       default: 
        break; 
      } 
      return fragment; 
     } 


     @Override 
     public int getCount() { 
      return 3; 
     } 
    } 

} 
+0

注意:這是viewpager的預期行爲。設置setOffscreenPageLimit會導致更高的內存佔用。如果您希望保存對碎片所做的更改,則需要實施某種存儲解決方案。 – poss

回答

2

使用

pager.setOffscreenPageLimit(X); 

其中X是ViewPager不會重建他們要保存這樣的頁面的計數。