0

当它是活动页面时,是否可以仅在 viewPager 的片段中调用方法?或者如果片段是当前页面,片段中的布尔值可能会有所不同?(如:)if(isActivePage)

我想在 asynctask 中加载一些数据并ProgressDialog在加载时显示 , 。但仅对于活动页面(用户应该能够调整,他访问的片段被缓存,而不是左侧和右侧的页面......)viewPager.setOffscreenPageLimit(0)不起作用(看这篇文章),我试过了设置一个,OnPageChangeListener但你不能在那里操作实际片段的任何属性。

请注意,这里是我尝试过FragmentActivityonCreate

...
fragments = new ArrayList<ArticlePageFragment>(pages);
for (int i = 0; i < pages; i++)
{
    ArticlePageFragment fragment = new ArticlePageFragment();
    Bundle args = new Bundle();
    ...
    fragment.setArguments(args);
    fragments.add(fragment);
}
viewPager.setOnPageChangeListener(new OnPageChangeListener()
{
    @Override
    public void onPageSelected(int position)
    {
        if (position > 0)
            fragments.get(position - 1).isActivePage = false;
        if (position < pages)
            fragments.get(position + 1).isActivePage = false;
        fragments.get(position).isActivePage = true;
    }
    ...
}

(inArticlePageFragment isActivePage只是一个公共布尔值......)

如果不可能,也许还有另一种方式,没有ViewPagerScreenSlidePagerAdapter extends FragmentStatePagerAdapter

编辑

private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter
{
    public ScreenSlidePagerAdapter(FragmentManager fm)
    {
        super(fm);
    }
    public Fragment getItem(int position)
    {
        return fragments.get(position);
    }
    @Override
    public int getCount()
    {
        return pages;
    }
}
4

1 回答 1

0

您需要使用 ViewPager 的适配器。你需要这样的设置......

// in your fragment
public boolean isActive(){
     return (mPageAdapter.getPosition() == MyFragment.POSITION);
}

// in your adapter
private pagePosition=0; // or initial position
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
    pagePosition = position;
}
于 2013-07-05T14:36:45.523 回答