Ruu*_*kis 2 java android android-fragments android-viewpager fragmentpageradapter
我在FragmentPagerAdapter中有大约20个片段,它们包含一个列表,它从中拾取片段,因此不会重新创建片段.
private List<TitledFragment> fragments;
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
this.fragments = new ArrayList<TitledFragment>();
}
@Override
public Fragment getItem(int i) {
return fragments.get(i).getFragment();
}
@Override
public int getCount() {
return fragments.size();
}
@Override
public CharSequence getPageTitle(int position) {
return fragments.get(position).getTitle();
}
public synchronized List<TitledFragment> getFragments() {
return fragments;
}
public synchronized void addFragment(TitledFragment fragment) {
fragments.add(fragment);
notifyDataSetChanged();
}
Run Code Online (Sandbox Code Playgroud)
FragmentPagerAdapter被设置为ViewPager的适配器,之后我重新排序片段(洗牌仅用于测试)
Collections.shuffle(mSectionsPagerAdapter.getFragments());
mSectionsPagerAdapter.notifyDataSetChanged();
Run Code Online (Sandbox Code Playgroud)
由于某种原因,只有标题的顺序被改变,即使它为getItem返回不同的片段,因为顺序是不同的.为什么这样,我怎么能绕过它呢?
你还需要覆盖getItemPosition().默认情况下,此函数始终返回POSITION_UNCHANGED,因此在调用时notifyDataSetChanged(),适配器会假定所有片段仍处于相同位置.(它不再调用getItem(),因为它认为已经创建了所有必需的片段.)你的新getItemPosition()应该在洗牌后返回每个片段的新位置.
一个简单的黑客就是总是返回POSITION_NONE,然后适配器将丢弃所有现有的片段,并在调用时在正确的位置重新创建它们getItem().当然,这不是有效的,并且具有额外的缺点,即正在观看的当前片段可能改变.但是,由于重新排序片段可能存在一些错误 - 请参阅我的问题 - 这种POSITION_NONE方法可能是最安全的方法.
| 归档时间: |
|
| 查看次数: |
4518 次 |
| 最近记录: |