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