0

我有一個tablayout(tab1,tab2,tab3)與ViewPager。看起來在應用程序啓動時,tab2被預加載,這很好。TabLayout預加載下一個選項卡

但是,我需要在tab1上輸入一些數據,我希望tab2更新其片段並隱藏一些基於從tab1輸入的數據的按鈕。

如何做到這一點?有沒有辦法預先加載標籤,以便當我滑動到tab2時,它將獲取最新的數據而不是舊的數據?

這裏是我的代碼

private ViewPager viewPager; 
private PagerAdapter adapter; 
private TabLayout tabLayout; 

在我的活動中onCreate方法。

tabLayout.addTab(tabLayout.newTab().setText("Input")); 
    tabLayout.addTab(tabLayout.newTab().setText("Detail")); 
    tabLayout.addTab(tabLayout.newTab().setText("Chart")); 
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); 

    viewPager = (ViewPager) findViewById(R.id.pager); 
    adapter = new PagerAdapter(getSupportFragmentManager(), tabLayout.getTabCount()); 
    viewPager.setAdapter(adapter); 
    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) { 

     } 
    }); 

這裏是我的pageadapater類

public class PagerAdapter extends FragmentPagerAdapter { 
int mNumOfTabs; 
private InputFragment inputFragment; 
private DetailFragment detailFragment; 
private ChartFragment chartFragment; 

public PagerAdapter(FragmentManager fm, int NumOfTabs) { 
    super(fm); 
    this.mNumOfTabs = NumOfTabs; 
} 

@Override 
public int getItemPosition(Object object) { 
    // TODO Auto-generated method stub 
    return POSITION_NONE; 
} 


@Override 
public Fragment getItem(int position) { 
    switch (position) { 
     case 0: 
      inputFragment = new InputFragment(); 
      return inputFragment; 
     case 1: 
      detailFragment = new detailFragment(); 
      return detailFragment; 
     case 2: 
      chartFragment = new ChartFragment(); 
      return chartFragment; 
     default: 
      return null; 
    } 
} 

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

回答

1

您detailfragment片段

@Override 
    public void setUserVisibleHint(boolean isVisibleToUser) { 
    super.setUserVisibleHint(isVisibleToUser); 
    if (isVisibleToUser) { 
//check values on tab 1 and try to update your tab 2 views accordingly 
    } 
    } 
相關問題