2014-10-30 130 views
0

我在我的android應用程序的屏幕左側有一個靜態菜單。無論何時從左側菜單中單擊一個項目,fragment都會出現在它的旁邊。在片段內查看尋呼機的選項卡 - android

左側菜單中的一項是課程。在課程fragment包含一個viewpager觀看閱讀或聽課程。您可以通過側滑動或單擊標題欄上的相應選項卡來導航到這三個選項之一。這一切工作正常。

但是,如果我點擊左側菜單欄上的另一個項目並導航回課程部分,它會混亂起來。 onCreateView()被再次調用,因此再次將標籤添加到標題欄和viewpager。我嘗試刪除onPause()方法中的所有選項卡,並刪除viewpager中的所有視圖。選項卡不再被添加,但屏幕上的頁面現在是空白的。

任何幫助,非常感謝。

這裏的類extends FragmentPagerAdapter

public class TabsPagerAdapter extends FragmentPagerAdapter { 

    public TabsPagerAdapter(FragmentManager fm) { 
     super(fm); 

    } 

    @Override 
    public Fragment getItem(int index) { 

     switch (index) { 
     case 0: 
      // Top Rated fragment activity 
      return new WatchCourseFrag(); 
     case 1: 
      // Games fragment activity 
      return new ReadCourseFrag(); 
     case 2: 
      // Movies fragment activity 
      return new ListenCourseFrag(); 
     } 

     return null; 
    } 

    @Override 
    public int getCount() { 
     // get item count - equal to number of tabs 
     return 3; 
    } 

} 

,這裏是標籤fragment類:

public class TabFrag2 extends Fragment implements ActionBar.TabListener { 

    private ViewPager viewPager; 
    private TabsPagerAdapter mAdapter; 
    private ActionBar actionBar; 
    // Tab titles 
    private String[] tabs = { "Watch", "Read", "Listen" }; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.pager, container, false); 

     // Initilization 
     viewPager = (ViewPager) view.findViewById(R.id.pager); 
     actionBar = ((HomeScreenTablet) getActivity()).getSupportActionBar(); 
     mAdapter = new TabsPagerAdapter(getFragmentManager()); 

     viewPager.setAdapter(mAdapter); 
     actionBar.setHomeButtonEnabled(false); 
     actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

     // Adding Tabs 
     // Adding Tabs 
     for (String tab_name : tabs) { 
      actionBar.addTab(actionBar.newTab().setText(tab_name) 
        .setTabListener(this)); 
     } 

     /** 
     * on swiping the viewpager make respective tab selected 
     * */ 
     viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { 

      @Override 
      public void onPageSelected(int position) { 
       // on changing the page 
       // make respected tab selected 
       actionBar.setSelectedNavigationItem(position); 
      } 

      @Override 
      public void onPageScrolled(int arg0, float arg1, int arg2) { 
      } 

      @Override 
      public void onPageScrollStateChanged(int arg0) { 
      } 
     }); 
     viewPager.setOffscreenPageLimit(3); 
     return view; 
    } 

    @Override 
    public void onTabReselected(Tab tab, FragmentTransaction ft) { 
    } 

    @Override 
    public void onTabSelected(Tab tab, FragmentTransaction ft) { 
     // on tab selected 
     // show respected fragment view 
     viewPager.setCurrentItem(tab.getPosition()); 
    } 

    @Override 
    public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
    } 

    public void onPause() { 
     super.onPause(); 
     viewPager.removeAllViews(); 
     viewPager.removeAllViewsInLayout(); 
     actionBar.removeAllTabs(); 

    } 
} 

回答

0

找到了答案: 更改 「TabsPagerAdapter擴展FragmentPagerAdapter」 到 「TabsPagerAdapter擴展FragmentStatePagerAdapter」

相關問題