Viewpager和FragmentPagerAdapter:页面视图删除

mra*_*tor 10 android android-fragments android-viewpager

我使用的是Viewpager同一个的FragmentPagerAdapter,以允许添加和移除网页.每页显示从互联网获得的数据.

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

总的来说,这一切都运作良好.我看到的问题如下:

  1. 你有三个数据页面:

    [第1页] [第2页] [第3页]

  2. 你删除了最后一页以外的任何页面,比如第2页; 第2页按需要消失:

    [第1页] [第3页]

  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();
Run Code Online (Sandbox Code Playgroud)

使用调试器,它显示片段FragmentManagerexecutePendingTransactions()调用后被删除.但是在FrampePagerAdapters调用中,mAdapter.notifyDataSetChanged()片段会重新添加,然后在创建新页面时显示.

我尝试使用FrameStatePagerAdapter,因为它应该允许销毁片段,但它不起作用.在我的FragmentPagerAdapter的getItemPosition()方法中,我使用return FragmentAdapter.POSITION_NONE;了我遇到的另一篇SO文章.

似乎该页面的视图未被销毁,但随后又被添加回新页面.我尝试removeViewAt()在新页面的视图上使用该方法,但这不起作用.


对此我不熟悉,我确信我错过了一些明显的东西......

ser*_*nka 1

您应该FragmentStatePagerAdapter从该适配器的项目列表中扩展和删除相应的项目,而不是尝试从活动中删除片段。adapter.notifyDataSetChanged()移除适配器中的项目后,请不要忘记致电。一旦完成,剩下的事情ViewPager就会FragmentStatePagerAdapter处理好。