ViewPager+FragmentPagerAdapter刷新
来源:互联网 发布:抠图算法 编辑:程序博客网 时间:2024/06/10 16:25
ViewPager+FragmentPagerAdapter刷新
一、全刷新
百度好多都是说在继承FragmentPagerAdapter的类里重写getItemPosition()方法,能刷新所有fragment。
@Overridepublic int getItemPosition(Object object) { return POSITION_NONE;}源码是这样说的:
{@link #POSITION_UNCHANGED} if the object's position has not changed,* or {@link #POSITION_NONE} if the item is no longer present.当返回POSITION_UNCHANGED时,认为没有改变,于是不刷新;
返回POSITION_NONE时,认为不存在,则重新创建。
但是,本人使用无效,原因不详,于是我想,反正都是重新创建,那我移除后再创建不是一个道理吗,然后有了以下代码:
viewPager.removeAllViews();mainPagerAdapter = new MainPagerAdapter(getSupportFragmentManager());viewPager.setAdapter(mainPagerAdapter);现实证明有效。当然,很多人会说这样浪费资源,所以这种方法应在不讲究铺张浪费的时候使用!
若结合PagerSlidingTab使用,要加上:
viewPager.removeAllViews();slidingTab.removeView(viewPager);mainPagerAdapter = new MainPagerAdapter(getSupportFragmentManager());viewPager.setAdapter(mainPagerAdapter);slidingTab.setViewPager(viewPager);
二、单刷新
存在铺张浪费,当然就有勤俭节约!
1、为每个fragment添加标识
首先,在创建fragment的java类中定义一个List<String> tagLists 来存储一下tag
private List<String> tagLists;
然后重写FragmentPagerAdapter的instantiateItem()方法,PagerAdapter在该方法中通过事务添加片段,所以要在该方法中存tag:
public Object instantiateItem(ViewGroup container, int position) { tagLists.add(makeFragmentName(container.getId(), (int) getItemId(position))); return super.instantiateItem(container, position);}public static String makeFragmentName(int viewId, int index) { return "android:switcher:" + viewId + ":" + index;}
2、指定更新的fragment
在继承FragmentPagerAdapter的java类中写一个update()方法
public void update(int item) { Fragment fragment = fm.findFragmentByTag(tagLists.get(item)); if (fragment != null) { switch (item) { case 0: ((FragmentA) fragment).query(); break; case 1: ((FragmentB) fragment).query(); break; case 2: ((FragmentC) fragment).query(); break; } }}query()方法是用于接口回调机制更新指定fragment要使用的方法。
3、定义回调接口
public interface FragmentListener { void onFragmentRefreshListener(int item);}ViewPager所在的Activity继承该接口,实现方法:
public void onFragmentRefreshListener(int item) { //mainPagerAdapter为我们自定义的适配器对象 mainPagerAdapter.update(item);// mainPagerAdapter.update(item); }要更新多少个fragment,就写多少
mainPagerAdapter.update(item);
fragment中重写onAttach()方法。
public static FragmentListener listener;@Overridepublic void onAttach(Activity activity) { listener = (FragmentListener) activity; super.onAttach(activity);}
4、调用监听方法
在需要更新的地方调用:
其中0是FragmentA的item值,依此类推,1是FragmentB的,这里意思为更新FragmentA触发,同时更新FragmentA和FragmentB。if (FragmentA.listener != null) { //Fragment自身刷新 FragmentA.listener.onFragmentRefreshListener(0); //另一个Fragment刷新 FragmentA.listener.onFragmentRefreshListener(1);}
到此即可选择性更新Fragment,不需要重新创建,以此记录,互相学习,有更好的方法请留链接!
0 0
- ViewPager+FragmentPagerAdapter刷新
- 笔记:ViewPager+FragmentPagerAdapter数据刷新问题
- ViewPager+Fragment+FragmentPagerAdapter,设置自定义刷新
- ViewPager+Fragment+FragmentPagerAdapter刷新空指针
- FragmentPagerAdapter与FragmentStatePagerAdapter的区别+ViewPager数据刷新问题详解
- FragmentPagerAdapter刷新
- FragmentPagerAdapter 刷新
- Android-- ViewPager FragmentPagerAdapter FragmentStatePagerAdapter
- android:ViewPager与FragmentPagerAdapter
- viewpager : FragmentStatePagerAdapter和FragmentPagerAdapter
- ViewPager + FragmentPagerAdapter的使用
- ViewPager PagerAdapter FragmentPagerAdapter FragmentStatePagerAdapter
- viewPager+fragment fragmentPagerAdapter
- ViewPager及其适配器FragmentPagerAdapter
- ViewPager与FragmentPagerAdapter
- Android:Fragment+ViewPager+FragmentPagerAdapter
- FragmentPagerAdapter+ViewPager 笔记
- ViewPager 配合FragmentPagerAdapter
- ios学习笔记之-点击一个按钮弹出拨打电话提示框
- webrtcglossary.com
- properties文件、getResouce()方法、getResourceAsStream()方法
- 20170227. EXIF信息的说明(opencv320 ApplyExifOrientation)
- android禁止EditText输入emoji表情图片
- ViewPager+FragmentPagerAdapter刷新
- 原码,反码和补码
- android blogs
- RN源码分析
- 二维图形旋转公式的推导
- windows下部署免费ssl证书(letsencrypt)
- Spring面试,IoC和AOP的理解
- 去除button点击后出现的边框
- java并发容器——延迟队列DelayQueue