我不熟悉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);
这就是我在我的活动中其他地方尝试过的,当我收到来自书名片段的回调并选择了标题时:
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
,该实例不是当前附加的实例(如预期的那样,引发异常)。
我在这里看到很多人(示例)只是将片段存储在getView()
. 那正确吗?因为通过查看官方示例,对我来说似乎是一种反模式(通过持有项目来击败自动参考)。这也是这里和这里的意见(在我看来是正确的)。
有什么建议么?如果我不理解所有这一切,我不会感到惊讶......