2012-11-17 60 views
1

我有一个应用程序使用SlidingMenu,动作栏Sherlock,现在我想重写我以前的代码,使用支持库中引入的嵌套片段与Android 4.2发布。使用ViewPager嵌套片段时黑色空片段(Android 4.2,支持库)

问题是,当我滑过碎片时,它们在瞬间可见,然后消失(黑屏)。有时他们留在屏幕上,有时候屏幕完全是黑色的,并且片段根本没有出现。我怀疑我对片段生命周期缺乏了解,但我确实看不到这里的错误。

通过它们滑动会得到不同的结果。在初始加载时,第一个片段是黑色的。如果我滑到nr 4并回到nr 1,那么nr 1片段是OK的。如果我快速滑动到nr 2,然后滑到nr 1,那么nr 1又是黑色的。如果我刷慢慢地从NR 2 NR 1,然后NR 1个住宿OK: -/

这里是我的代码:

public class LeagueInfoFragment extends SherlockFragment { 
... 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    if (container != null) { 
     container.removeAllViews(); 
    } 
    setRetainInstance(true); 
    setHasOptionsMenu(true); 
    mExampleId = getArguments().getInt("mExampleId"); 

    View view = inflater.inflate(R.layout.viewpager_tournament, container, 
      false); 
    ViewPager awesomePager = (ViewPager) view.findViewById(R.id.pager); 
    awesomePager.setAdapter(new ExamplePagerAdapter(this, getChildFragmentManager(), createFragments())); 

    TabPageIndicator titleIndicator = (TabPageIndicator) view 
      .findViewById(R.id.titles); 
    titleIndicator.setViewPager(awesomePager); 

    return view; 
} 

private List<Fragment> createFragments() { 
     List<Fragment> list = new ArrayList<Fragment>(); 
     list.add(LeagueTableFragment.newInstance(0)); 
     list.add(FixturesFragment.newInstance(1)); 
     list.add(NewsFragment.newInstance(2)); 
     list.add(TopscorerFragment.newInstance(3)); 
     return list;  
} 

private class ExamplePagerAdapter extends FragmentPagerAdapter { 
    String[] pages; 

    LeagueInfoFragment _activity; 
    List<Fragment> fragments; 
    private ExamplePagerAdapter(LeagueInfoFragment a, 
      FragmentManager fragManager, List<Fragment> frags) { 
     super(fragManager); 
     this.fragments = frags; 
     _activity = a; 
     pages = new String[] { _activity.getString(R.string.table), 
       _activity.getString(R.string.fixtures), 
       _activity.getString(R.string.news), 
       _activity.getString(R.string.top_scorers) }; 
    } 

    @Override 
    public int getCount() { 
     return fragments.size(); 
    } 

    @Override 
    public Fragment getItem(int arg0) { 
     return fragments.get(arg0);   
    } 

    public String getPageTitle(int position) { 
     return pages[position]; 
    } 
} 

这里是我的一个片段(简化,以减少代码贴在这里) :

public class NewsFragment extends SherlockFragment implements IAsynchData 
{ 
public static NewsFragment newInstance(int notUsed) { 
    NewsFragment f = new NewsFragment(); 
    return f; 
} 

@Override 
public View onCreateView(android.view.LayoutInflater inflater, 
    ViewGroup container, Bundle savedInstanceState) { 
    if (container != null) { 
     container.removeAllViews(); 
    } 
    View view = inflater.inflate(R.layout.fragment_news, container, 
      false); 
      //Code left out to load the URL in the webview 
    updateRssFeed("http://www.sportspage.com/myteam"); 
    return view; 
} 

}

回答

2

很抱歉,但你为什么这样做,而onCreateView片段

if (container != null) { 
     container.removeAllViews(); 
} 

据我所知,在这一刻,容器是你ViewPagerremoveAllViews() - 删除您片段的所有创建查看ViewPager

+0

哈,这就是我从其他人那里复制代码所得到的结果!我不知道为什么那个代码在那里,但保留它,因为我认为它有一个目的。当我没有使用嵌套片段时,猜猜它是可以的,所以也许它在某个时候有意义。谢谢!! –