Android FragmentPagerAdapter 更新数据
来源:互联网 发布:人工智能专业大学排名 编辑:程序博客网 时间:2024/06/05 17:18
今天在弄ViewPager 其中被FragmentPagerAdapter搞死了 一直更新不了数据 看了很多网上的文章 都不能满足我的需求 然后看到了这篇文章 分享下
摘要
FragmentPagerAdapter 更新数据
在使用ViewPager+FragmentPagerAdapter时候,更新Fragment里数据是不起作用,FragmentPagerAdapter添加或减少Fragment时,前面的Fragment内容更新不起作用等等问题,有的做法是暴力删除fragment列表,如
List<Fragment> fragments = getSupportFragmentManager().getFragments();for (int i = fragments.size() - 1; i >= 0; i--) { getSupportFragmentManager().beginTransaction().remove(fragments.get(0));}
也有做法是重写FragmentPagerAdapter的instantiateItem(ViewGroup container, int position)方法等等,有效虽有效,但比较粗爆。
FragmentPagerAdapter.getItem(int position)在更新时候不一定会被调用,所以Fragment更新是无效,来看看FragmentPagerAdapter的父类PagerAdapter中的代码instantiateItem
@Override public Object instantiateItem(ViewGroup container, int position) { if (mCurTransaction == null) { mCurTransaction = mFragmentManager.beginTransaction(); } final long itemId = getItemId(position); // Do we already have this fragment? String name = makeFragmentName(container.getId(), itemId); Fragment fragment = mFragmentManager.findFragmentByTag(name); if (fragment != null) { if (DEBUG) Log.v(TAG, "Attaching item #" + itemId + ": f=" + fragment); mCurTransaction.attach(fragment); } else { fragment = getItem(position); if (DEBUG) Log.v(TAG, "Adding item #" + itemId + ": f=" + fragment); mCurTransaction.add(container.getId(), fragment, makeFragmentName(container.getId(), itemId)); } if (fragment != mCurrentPrimaryItem) { fragment.setMenuVisibility(false); fragment.setUserVisibleHint(false); } return fragment; }
FragmentPagerAdapter里在根据getItemId(int position)来判断当前position里Fragment是否存在,如果存在,则不会创建亦不会更新,那么要让FragmentPagerAdapter的更新生效,那在getItemId(int)里根据数据返回一个唯一的数据ID,当FragmentPagerAdapter更新时,数据ID改变了,那么Fragment就会调用getItem(int)去获取新Fragment,达到更新效果
@Overridepublic long getItemId(int position) {// 获取当前数据的hashCodeint hashCode = fragments.get(position).hashCode();return hashCode;}在adapter加了上面代码后,效果就出来了。被搞死了,我已经用尽洪荒之力了,要死了
0 0
- Android FragmentPagerAdapter 更新数据
- Android FragmentPagerAdapter 数据刷新问题
- FragmentActivity + ViewPager + Fragment + FragmentPagerAdapter 数据及时更新
- android FragmentPagerAdapter 无法刷新数据的解决方法
- Tab总结及完美解决FragmentPagerAdapter保存数据更新问题
- viewpager动态更新数据重新setAdapter(FragmentPagerAdapter)不起作用
- Android FragmentPagerAdapter.notifyDataSetChanged() 并不能更新其 Fragment解决方案
- [Android] 为什么调用 FragmentPagerAdapter.notifyDataSetChanged() 并不能更新其 Fragment?
- FragmentPagerAdapter无法更新
- FragmentPagerAdapter 更新数据遇到了坑啊。下拉刷新不会更新页面、有缓存。
- Android FragmentPagerAdapter数据刷新notifyDataSetChanged没效果研究
- Android FragmentPagerAdapter数据刷新notifyDataSetChanged没效果研究
- Android FragmentPagerAdapter数据刷新notifyDataSetChanged没效果研究
- Android FragmentPagerAdapter数据刷新notifyDataSetChanged没效果研究
- Android FragmentPagerAdapter数据刷新notifyDataSetChanged没效果研究
- Android FragmentPagerAdapter数据刷新notifyDataSetChanged没效果研究
- Android FragmentPagerAdapter vs FragmentStatePagerAdapter
- Android-- ViewPager FragmentPagerAdapter FragmentStatePagerAdapter
- HDU-5773-The All-purpose Zero
- Python下多线程编程遇到的问题以及解决
- Java Networking: Socket
- Liblinphone 3.9.1中文--Modules--Placing and receiving calls
- PHP 连接web services 代码
- Android FragmentPagerAdapter 更新数据
- Extjs的grid的单元格中加载超链接和按钮
- Android TabLayout
- 获取iOS设备唯一标示
- Spring <context:annotation-config>和<context:component-scan>区别
- Sublime Text 3的使用教程
- 友元函数和友元类
- POJ1065Wooden Sticks(最小上升序列)
- php框架(CI,TP,LAVAREL,SWOOLE)源码学习之TP