我遇到了重叠片段的问题,我无法解决。当我第一次开始活动时,片段的顺序混合在一起。一旦我开始滑动,一切正常。基本上,我需要找到一种方法来对每个名为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;
}