微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

android – Viewpager和FragmentPagerAdapter:页面视图删除

我正在使用一个带有FragmentPagerAdapter的Viewpager来允许添加删除页面.每页显示从互联网获取的数据.

添加页面时,新的片段与该页面相关联.数据通过AsyncTask获取显示在片段中.当用户选择删除页面时,想法是销毁页面和关联的片段.

一般来说,这一切都很好.我看到的问题如下:

>您有三页数据:

[第1页] [第2页] [第3页]
>删除除最后一页之外的任何页面,如第2页;根据需要消失:

[第1页] [第3页]
>添加页面;但是,新页面不是一个空白的页面,而是从第3页显示数据(视图).

[第1页] [第3页] [第4页,但显示第3页的观点/数据应为空白]

我的活动中的页面删除代码如下:

// Destroy fragment for this page
   DataListFragment curFrag = getFragmentByName(currentPage);
   FragmentManager fm = getSupportFragmentManager();
   fm.beginTransaction().remove(curFrag).commit();
   fm.executePendingTransactions();
   curFrag = null;

   // Remove page and update adapter
   mPageTitles.remove(position);        
   mAdapter.notifyDataSetChanged();

使用调试器,它显示在执行executePendingTransactions()调用后,该片段从FragmentManager中删除.但是在FrampePagerAdapters调用mAdapter.notifyDataSetChanged()中,片段被添加回来,然后在创建新页面显示.

我尝试使用FrameStatePagerAdapter,因为这应该允许破坏碎片,但它没有工作.在我的FragmentPagerAdapter的getItemPosition()方法中,我使用返回FragmentAdapter.POSITION_NONE;正如我遇到的另一篇SO文章所指出的.

似乎该页面的View不会被销毁,而是添加到新页面中.我尝试在新页面的视图上使用removeViewAt()方法,但是没有起作用.

作为新的,我相信我错过了一些明显的东西

解决方法

您应该扩展FragmentStatePagerAdapter,并从该适配器中的项目列表中删除相应的项目,而不是尝试从活动中删除片段.删除适配器中的项后,请勿忘记调用adapter.notifyDataSetChanged().一旦完成,ViewPager和FragmentStatePagerAdapter将保留其余的内容.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐