2017-02-16 17 views
1

如果我有三個選項卡(A,B,C),如何顯示B選項卡不是一個標籤時onCreateView?如何更改我的標籤頁時onCreateView在片段

我嘗試在代碼中使用viewPager.setCurrentItem(1);,但它似乎並不那麼容易。

任何人都可以給我建議,任何幫助將不勝感激。

我的標籤ViewPagerAdapter:

public class ViewPagerDataReportAdapter extends FragmentPagerAdapter { 

    private final List<Fragment> fragmentList = new ArrayList<>(); 
    private final List<String> stringList = new ArrayList<>(); 
    private int numOfTabs; 

    public ViewPagerDataReportAdapter(FragmentManager manager, int numOfTabs) { 
     super(manager); 
     this.numOfTabs = numOfTabs; 
    } 

    @Override 
    public Fragment getItem(int position) { 
     switch (position) { 
      case 0://my tab A 
       DataReportForBloodPressure bloodPressure = new DataReportForBloodPressure(); 
       return bloodPressure; 
      case 1://my tab B 
       DataReportForBloodSugar bloodSugar = new DataReportForBloodSugar(); 
       return bloodSugar; 
      case 2://my tab C 
       DataReportForBodyWeight bodyWeight = new DataReportForBodyWeight(); 
       return bodyWeight; 
      default: 
       return null; 
     } 
    } 

    @Override 
    public int getCount() { 
     return numOfTabs; 
     //return fragmentList.size(); 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return stringList.get(position); 
    } 
} 

我的片段:

public class DataReportThreePages extends Fragment { 

    private View view; 
    private TabLayout tabLayout; 

    public DataReportThreePages() { 
     // Required empty public constructor 
    } 

    public static DataReportThreePages newInstance(){return new DataReportThreePages();} 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
//I want to open B tab not A tab when onCreateView 
     if (view == null) { 
      view = inflater.inflate(R.layout.fragment_data_report_three_pages, container, false); 
      tabLayout=(TabLayout)view.findViewById(R.id.tabLayoutDataReport); 
      tabLayout.addTab(tabLayout.newTab().setText(R.string.bloodPressure));//setText for A 
      tabLayout.addTab(tabLayout.newTab().setText(R.string.bloodSugar));//setText for B 
      tabLayout.addTab(tabLayout.newTab().setText(R.string.bodyWeight));//setText for C 
      tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); 



      final ViewPager viewPager=(ViewPager)view.findViewById(R.id.viewPagerDataReport); 

      viewPager.setCurrentItem(1);//it's no working 

      ViewPagerDataReportAdapter viewPagerAdapter=new ViewPagerDataReportAdapter(getChildFragmentManager(),tabLayout.getTabCount()); 
      viewPager.setAdapter(viewPagerAdapter); 
      viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); 
      tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
       @Override 
       public void onTabSelected(TabLayout.Tab tab) { 
        viewPager.setCurrentItem(tab.getPosition()); 
       } 

       @Override 
       public void onTabUnselected(TabLayout.Tab tab) { 

       } 

       @Override 
       public void onTabReselected(TabLayout.Tab tab) { 

       } 
      }); 

     } 
     return view; 
    } 
+0

請與展會代碼'viewPager.setCurrentItem(1);' –

+0

一個問題可能是,你是(1)適配器設置爲viewpager之前調用viewPager.setCurrentItem。嘗試在viewPager.setAdapter(viewPagerAdapter)後調用它; – Gautam

+0

我懂了!謝謝你的回覆 –

回答

1

您應該設置

viewPager.setCurrentItem(1); 

viewPager.setAdapter(viewPagerAdapter); 
+0

哦,我想念它!謝謝你的幫助 ! –

1

集:

viewPager.setCurrentItem(1); 
+0

我設置了錯誤的步驟,謝謝你的回覆 –

2

使用此行

viewPager.setCurrentItem(1);

後下面的代碼,因爲它視尋呼機的一套適配器後設置當前項目。

ViewPagerDataReportAdapter viewPagerAdapter=new ViewPagerDataReportAdapter(getChildFragmentManager(),tabLayout.getTabCount()); 
     viewPager.setAdapter(viewPagerAdapter); 

編碼快樂

+0

謝謝,我明白了 –

相關問題