2012-11-17 86 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

哈,這就是我從其他人那裏複製代碼所得到的結果!我不知道爲什麼那個代碼在那裏,但保留它,因爲我認爲它有一個目的。當我沒有使用嵌套片段時,猜猜它是可以的,所以也許它在某個時候有意義。謝謝!! –