ViewPager+FragmentPagerAdapter强制刷新所有Fragment

最近改变,需要自定义频道,涉及ViewPaper的Fragment的添加和删除,如下:

我需要删除其中某个频道,同时页面需要剔除,同时Tablayout也需要更新。我采用的是SlidingTabLayout + ViewPager + FragmentPagerAdapter + Fragment的方式。SlidingTabLayout 是三方的。 我需要解决:

1. 更新Tableyout标题

2. 更新Viewpaper(我图简单就直接销毁重建了,我想其他方式应该还需要深入Fragment的管理才行)

3. 至于其他的组合方式,看情况刷新就好

问题1:采用如下方式进行刷新,根本没什么用。

问题2:FragmentPagerAdapter增加网友说的方式,来。。。嚯哈哈。其实也不行。。。

@Override

public int getItemPosition(Object object) {

    // 最简单解决 notifyDataSetChanged() 页面不刷新问题的方法

    return POSITION_NONE;

}

@Override

public void destroyItem(ViewGroup container, int position, Object object) {

    // 把 Object 强转为 View,然后将 view 从 ViewGroup 中清除

    container.removeView((View) object);

}

解决:

A. ViewPager的FragmentPagerAdapter的刷新

OtherFragmentAdapter.java - 重点就是提供setFragments方法,同时getItemPosition需要返回POSITION_NONE.

import android.support.v4.app.Fragment;

import android.support.v4.app.FragmentManager;

import android.support.v4.app.FragmentPagerAdapter;

import android.support.v4.app.FragmentTransaction;

import android.view.View;

import android.view.ViewGroup;

import java.util.ArrayList;

import java.util.List;

/**

* Created by hl on 2018/3/12.

*/

/**

* 资讯碎片适配器

*/

public class OtherFragmentAdapter extends FragmentPagerAdapter{

    private List<String> mTitleList;

    private List<Fragment> mFragmentList;

    private FragmentManager fm;

    public OtherFragmentAdapter(FragmentManager fm, List<String> titleList, List<Fragment> fragmentList){

        super(fm);

        this.fm = fm;

        this.mTitleList = titleList;

        this.mFragmentList = fragmentList;

    }

    @Override

    public Fragment getItem(int position) {

        return mFragmentList.get(position);

    }

    @Override

    public int getCount() {

        return mFragmentList.size();

    }

    public void setFragments(List<Fragment> fragments) {

        if(this.mFragmentList != null){

            FragmentTransaction ft = fm.beginTransaction();

            for(Fragment f:this.mFragmentList){

                ft.remove(f);

            }

            ft.commit();

            ft = null;

            fm.executePendingTransactions();

        }

        this.mFragmentList = fragments;

        notifyDataSetChanged();

    }

    @Override

    public int getItemPosition(Object object) {

        return POSITION_NONE;

    }

}

然后刷新 - 注意:fragmentList需要重新New一个,否则如果还是之前的列表对象,那么你会发现,还是没有能销毁重建!!!

            fragmentList = new ArrayList<>();

            fragmentList.add(InfoFragmentNews.newInstance("news", mParam2/*资讯*/));

            for (int i = 0; i < tagTypeList.size(); ++i) {

                fragmentList.add(OtherProjectFragment.newInstance(tagTypeList.get(i), tags.get(i)));

            }

            mInfoFragmentAdapter.setFragments(fragmentList);

B. SlidingTabLayout的刷新,由于没有对应的方法来刷新,所以我自己修改源码添加的对应的updateTitle方法:

SlidingTabLayout.java

  /**

    * @hl 更新标题

    * @param titles

    */

    public void updateTitle(String[] titles){

        mTitles.clear();

        Collections.addAll(mTitles, titles);

        notifyDataSetChanged();

    }

然后更新数据即可 - 都处理完以后,记得重新设置tab选中页为第一页。

  String[] strings = new String[titleList.size()];

            titleList.toArray(strings);

            infosSlideTabLayout.updateTitle(strings);

            ///< 设置默认选中页(viewpaper也可以设置)

            infosSlideTabLayout.setCurrentTab(1);

            ///< 设置选中页状态(字体大小,颜色等)

            infosSlideTabLayout.onPageSelected(1);

以上就是我自定义频道后的导航的相关处理。目前来看没啥大问题 。。。感觉还是麻烦。 另外可以做优化,比如如果频道只是新增了,是不是没有必要这样做,只需要添加。如果换位置了,是否要销毁重建? 能不能有更换Viewpaper页面顺序的方式? 总之可能后续需要你做更多的优化处理。。。哪怕你要去看哈源码。。。这或许是我们应该往深的方向和进阶的道路指引吧。。。。

其他的想法:可以参考。。。

https://blog.csdn.net/axi295309066/article/details/53574976

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,110评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,443评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,474评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,881评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,902评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,698评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,418评论 3 419
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,332评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,796评论 1 316
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,968评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,110评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,792评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,455评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,003评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,130评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,348评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,047评论 2 355

推荐阅读更多精彩内容