如何仅在选择选项卡时加载操作栏选择选项卡的片段activity oncreate() 方法?
How to load the fragment activity oncreate() method of the actionbar selected tab only if the tab is selected?
我正在使用 viewpager 和 actionbar 选项卡(4 个选项卡)。当 Main activity 启动时,它会加载 4 个片段数据。
如何让它只加载 selected 选项卡数据?
另外,当我 select 选项卡 1、tab1 和 tab0 加载时。
如果我在 tab0 和 tab1 之间滑动,则不会调用两个选项卡的 onstart() 。
如果我 select tab2 然后 select tab0,tab0 加载的 onstart()。
如果我在 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,但没有用 link
我已经解决了问题。
我创建了一个静态变量来存储选定的选项卡索引。
@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
}
}
对于 ViewPager,我总是扩展 Fragment setMenuVisibility()。当 Fragment 可见时调用 true,不可见时调用 false。当它可见时,您可以执行所需的所有操作。
我正在使用 viewpager 和 actionbar 选项卡(4 个选项卡)。当 Main activity 启动时,它会加载 4 个片段数据。
如何让它只加载 selected 选项卡数据?
另外,当我 select 选项卡 1、tab1 和 tab0 加载时。
如果我在 tab0 和 tab1 之间滑动,则不会调用两个选项卡的 onstart() 。
如果我 select tab2 然后 select tab0,tab0 加载的 onstart()。
如果我在 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,但没有用 link
我已经解决了问题。
我创建了一个静态变量来存储选定的选项卡索引。
@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
}
}
对于 ViewPager,我总是扩展 Fragment setMenuVisibility()。当 Fragment 可见时调用 true,不可见时调用 false。当它可见时,您可以执行所需的所有操作。