【发布时间】:2014-02-16 01:36:51
【问题描述】:
我知道许多应用程序在 ViewPager 中使用片段。我的应用程序中也需要它。我没有找到任何指南,我怎么能排除this。这是我的代码:
public class MainActivity extends FragmentActivity {
Vector<Fragment> fragments;
ViewPager viewPager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
viewPager = (ViewPager) findViewById(R.id.pager);
fragments = new Vector<Fragment>();
fragments.add(Fragment.instantiate(this, Fragment1.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment2.class.getName()));
viewPager.setOffscreenPageLimit(fragments.size());
PagerAdapter pagerAdapter = new PagerAdapter(super.getSupportFragmentManager(), fragments);
viewPager.setAdapter(pagerAdapter);
viewPager.setCurrentItem(0);
}
class PagerAdapter extends FragmentPagerAdapter {
private List<Fragment> fragments;
public PagerAdapter(FragmentManager fm, List<Fragment> fragments) {
super(fm);
this.fragments = fragments;
}
@Override
public Fragment getItem(int position) {
return this.fragments.get(position);
}
@Override
public int getCount() {
return this.fragments.size();
}
}
}
但是这段代码不能很好地工作。有时我在 Fragment1 中收到关于 getActivity() 返回 null 的错误。我从该站点和其他有关此错误的帖子中阅读了许多帖子,现在我知道这是不好的方法-使用 Vector 来存储片段。但我仍然不知道,如何正确使用片段进行 ViewPager。请帮忙。
【问题讨论】:
-
由于大约 95% 的示例应用程序演示了
ViewPager是通过在ViewPager中演示使用片段来实现的,因此具体让您感到困惑? -
你应该重命名你的类,Android中已经有一个PagerAdapter类...
-
还有很多关于 ViewPager 中 Fragments 的教程:tamsler.blogspot.com/2011/10/…, thepseudocoder.wordpress.com/2011/10/05/…, alchemiasoft.wordpress.com/2012/02/15/… ...
-
@CommonsWare,我对正确管理内存中的片段感到困惑。有时它分离,MainActivity 重新创建,我从 getActivity() 方法得到 null。所以,我需要换一种方式,但我不知道怎么做。
-
@BArtWell 祝你好运......关于分离等问题,这就是它的方式,所以如果你有 ASyncTaks 或类似的东西,你只需要检查 Fragment还是依附的,不管是有观点还是那样的东西,千万不要假设...
标签: android android-fragments android-viewpager