mra*_*tor 10 android android-fragments android-viewpager
我使用的是Viewpager同一个的FragmentPagerAdapter,以允许添加和移除网页.每页显示从互联网获得的数据.
添加新页面时,会将新片段与该页面关联.数据通过AsyncTask获得并显示在Fragment中.当用户选择删除页面时,想法是销毁页面和相关的片段.
总的来说,这一切都运作良好.我看到的问题如下:
你有三个数据页面:
[第1页] [第2页] [第3页]
你删除了最后一页以外的任何页面,比如第2页; 第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();
Run Code Online (Sandbox Code Playgroud)
使用调试器,它显示片段FragmentManager在executePendingTransactions()调用后被删除.但是在FrampePagerAdapters调用中,mAdapter.notifyDataSetChanged()片段会重新添加,然后在创建新页面时显示.
我尝试使用FrameStatePagerAdapter,因为它应该允许销毁片段,但它不起作用.在我的FragmentPagerAdapter的getItemPosition()方法中,我使用return FragmentAdapter.POSITION_NONE;了我遇到的另一篇SO文章.
似乎该页面的视图未被销毁,但随后又被添加回新页面.我尝试removeViewAt()在新页面的视图上使用该方法,但这不起作用.
对此我不熟悉,我确信我错过了一些明显的东西......
您应该FragmentStatePagerAdapter从该适配器的项目列表中扩展和删除相应的项目,而不是尝试从活动中删除片段。adapter.notifyDataSetChanged()移除适配器中的项目后,请不要忘记致电。一旦完成,剩下的事情ViewPager就会FragmentStatePagerAdapter处理好。