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将保留其余的内容.

相关文章

Android 如何解决dialog弹出时无法捕捉Activity的back事件 在...
Android实现自定义带文字和图片的Button 在Android开发中经常...
Android 关于长按back键退出应用程序的实现最近在做一个Andr...
android自带的时间选择器只能精确到分,但是对于某些应用要求...