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