国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

ViewPager+FragmentPagerAdapter刷新

2019-11-06 09:57:57
字體:
來源:轉載
供稿:網友

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、調用監聽方法

在需要更新的地方調用:

if (FragmentA.listener != null) {    //Fragment自身刷新    FragmentA.listener.onFragmentRefreshListener(0);    //另一個Fragment刷新    FragmentA.listener.onFragmentRefreshListener(1);}其中0是FragmentA的item值,依此類推,1是FragmentB的,這里意思為更新FragmentA觸發,同時更新FragmentA和FragmentB。

到此即可選擇性更新Fragment,不需要重新創建,以此記錄,互相學習,有更好的方法請留鏈接!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 云阳县| 韶山市| 临武县| 宿松县| 乡宁县| 通山县| 桦甸市| 安仁县| 中牟县| 米脂县| 道真| 中超| 正镶白旗| 盘锦市| 抚顺市| 大冶市| 蚌埠市| 辽宁省| 都匀市| 方城县| 平遥县| 从化市| 台东县| 岳西县| 桦川县| 双牌县| 田阳县| 顺平县| 汝城县| 慈利县| 楚雄市| 陇南市| 长武县| 武胜县| 玉屏| 朝阳县| 玉田县| 萝北县| 兰溪市| 云霄县| 天长市|