【发布时间】:2012-04-18 19:32:01
【问题描述】:
我不熟悉FragmentPagerAdapter,所以这将是我们(你)认真阅读描述的问题之一。
结构:我有一个FragmentPagerAdapter(代码如下),它一次可以容纳两个片段。第一个显示书摘,第二个显示书名列表。
目标:我想实现标题中描述的:用户可以导航到分页器中的第二个片段,点击一个标题,然后我想将用户移回第一个片段并告诉第一个片段更新文本。第一个片段有一个triggerRefresh 方法。
代码:我相信我的问题是因为FragmentPagerAdapter 重用/创建片段的方式(我不明白)。这是我的课:
static class MyFragmentPagerAdapter extends FragmentPagerAdapter {
public MyFragmentPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
return NUM_ITEMS;
}
@Override
public Fragment getItem(int position) {
switch(position) {
case 0:
return new ExcerptsFragment();
case 1:
return new BookListFragment();
default:
throw new IllegalArgumentException("not this many fragments: " + position);
}
}
}
这就是我创建相关成员的方式:
ViewPager mViewPager = (ViewPager) findViewById(R.id.pager);
MyFragmentPagerAdapter mFragmentPagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager());
mViewPager.setAdapter(mFragmentPagerAdapter);
这是我在 Activity 的其他地方尝试过的,当我收到来自书名 Fragment 的回调时,选择了标题:
mViewPager.setCurrentItem(0); // back to excerpts screen page. It's OK.
// Here's the problem! How to identify the fragment 0
// to ExcerptsFragment and call its triggerRefresh()?!?
系列问题:
调用适配器的getView() 将不起作用,因为它将返回ExcerptsFragment 的新实例,它不是当前附加的实例(如预期的那样,引发异常)。
我在这里看到很多人 (example) 只是将片段存储在 getView() 中。那正确吗?因为通过查看官方示例,对我来说似乎是一种反模式(通过持有项目来击败自动参考)。这也是here 和here 的意见(在我看来是正确的)。
有什么建议吗?如果我一点都不了解这一切,我不会感到惊讶......
【问题讨论】:
标签: android android-fragments android-viewpager updating fragmentpageradapter