Android,ViewPager什么时候准备好了?重叠片段

时间:2015-10-17 17:48:54

标签: java android android-fragments android-viewpager

我遇到了重叠片段的问题,我无法解决。当我第一次开始活动时,片段的顺序混合在一起。一旦我开始滑动,一切正常。基本上,我需要找到一种方法来对每个名为onCreateView的GPFragment做出反应...例如我只能在适配器上调用onPageSelected(0),但这只能在创建所有视图后解决问题!我怎样才能做到这一点?提前谢谢!

我在FragmentActivity的onCreate中有这个

    pager = (ViewPager) findViewById(R.id.myviewpager);

    adapter = new GPPagerAdapter(this, this.getSupportFragmentManager());
    pager.setAdapter(adapter);
    pager.setOnPageChangeListener(adapter);

    pager.setCurrentItem(0);
    pager.setOffscreenPageLimit(10);

    pager.setPageMargin(-500);

然后我在适配器中:

@Override
public Fragment getItem(int position) {

    position = position % GamePickerActivity.GAMECOUNT;

    PGCGames game = PGCGames.fromNo(position + 1);

    Fragment frag = GPFragment.newInstance(context, position, scale, game.getDrawable(), game.getText());
    return frag;
}

@Override
public Object instantiateItem(ViewGroup container, int position) {

    // viewCollection.put(position, fragment.getView());
    Object o = super.instantiateItem(container, position);
    fragmentCollection.put(position, (GPFragment) o);
    return o;
}

这实际上是重点,在这里我安排了视图,以便所选择的一个在前面!在所有称为onCreateView-method

的片段之后,这完全正常
@Override
public void onPageSelected(int position) {
    View view = getViewFromFragmentSafe(fragmentCollection.get(position));
    if (view != null) {

        for (int i = 0; i < position; i++) {
            View otherView = getViewFromFragmentSafe(fragmentCollection.get(i));
            if (otherView != null)
                otherView.bringToFront();
        }
        for (int i = fragmentCollection.size(); i > position; i--) {
            View otherView = getViewFromFragmentSafe(fragmentCollection.get(i));
            if (otherView != null)
                otherView.bringToFront();
        }

        view.bringToFront();
        context.gameSet(position);
    }
}

然后我的GPFragment类:     public static Fragment newInstance(GamePickerActivity context,int pos,float scale,int drawable,int textResource){         Bundle b = new Bundle();         b.putInt(&#34; pos&#34;,pos);         b.putInt(&#34; text&#34;,textResource);         b.putInt(&#34; drawable&#34;,drawable);         b.putFloat(&#34; scale&#34;,scale);         return Fragment.instantiate(context,GPFragment.class.getName(),b);     }

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    if (container == null) {
        return null;
    }

    ...

    GPLinearLayout root = (GPLinearLayout) l.findViewById(R.id.root);
    float scale = this.getArguments().getFloat("scale");
    root.setScaleBoth(scale);

    return l;
}

0 个答案:

没有答案
相关问题