首页 文章

如果选中该选项卡,如何加载操作栏选定选项卡的片段活动oncreate()方法?

提问于
浏览
5

我正在使用viewpager和actionbar标签(4个标签) . 当Main活动开始时,它会加载4个片段数据 .

如何使它只加载选定的标签数据?

此外,当我选择选项卡1时,tab1和tab0加载 .

如果我在tab0和tab1之间滑动,则onstart()会调用两个未调用的选项卡 .

如果我选择tab2然后选择tab0,则onstart()会加载tab0 .

如果我在tab2和tab3之间滑动,则onstart()会调用两个未调用的选项卡 .

MainActivity.java

MainPagerAdapter tabsPagerAdapter;
ViewPager viewPager;
ActionBar actionBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    viewPager = (ViewPager) findViewById(R.id.pager);
    tabsPagerAdapter = new MainPagerAdapter(getSupportFragmentManager());
    viewPager.setAdapter(tabsPagerAdapter);

    actionBar = getSupportActionBar();
    actionBar.setHomeButtonEnabled(false);
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);


    actionBar.addTab(actionBar.newTab().setIcon(getResources().getDrawable(R.drawable.doros)).setTabListener(this));
    actionBar.addTab(actionBar.newTab().setIcon(getResources().getDrawable(R.drawable.esteshara)).setTabListener(this));
    actionBar.addTab(actionBar.newTab().setIcon(getResources().getDrawable(R.drawable.aswak)).setTabListener(this));
    actionBar.addTab(actionBar.newTab().setIcon(getResources().getDrawable(R.drawable.akhbar)).setTabListener(this));


    viewPager.setOffscreenPageLimit(0);


    getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
    getSupportActionBar().setCustomView(R.layout.abs_layout);
    viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        }

        @Override
        public void onPageSelected(int position) {
            actionBar.setSelectedNavigationItem(position);
        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });

    viewPager.setCurrentItem(3);



}

 @Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
    viewPager.setCurrentItem(tab.getPosition());
}

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

}


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

}

MainPageAdapter.java

public class MainPagerAdapter extends FragmentPagerAdapter implements PagerSlidingTabStrip.IconTabProvider{

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

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

private int[] tabIcons = {
        R.drawable.ar,
        R.drawable.ar,
        R.drawable.ar,
        R.drawable.ar
};



@Override
public android.support.v4.app.Fragment getItem(int position) {
   switch (position)
   {
       case 3: return new NewsFragment();
       case 1: return new ConsultationFragment();
       case 2: return new IndecesFragment();
       case 0: return new LessonsFragment();
       default: return null;
   }
}



@Override
public int getPageIconResId(int i) {
    return tabIcons[i];
}

}

我找到了这个链接,但它没有帮助link

2 回答

  • 1

    我已经解决了这个问题 .

    我创建了一个静态变量来存储选定的选项卡索引 .

    @Override
    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
        sharedVariables.setSelectedTab(tab.getPosition());
    

    由于Viewpager会在每次页面更改时加载所选页面以及左页和右页(因为它们存在),因此我重写此函数以检查此片段是否对用户可见,然后调用onresume方法 .

    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if (isVisibleToUser) {
                onResume();
        } else {
            // Do your Work
        }
    }
    
  • 1

    使用ViewPager,我总是扩展Fragment setMenuVisibility() . 当Fragment可见时调用true,当_174201可见时调用false,可以执行所需的所有操作 .

相关问题