ViewPager使用FragmentPagerAdapter滑动Fragment动态加载Atlas bundle不显示问题

问题描述

ViewPager使用FragmentPagerAdapter滑动Fragment,然后通过Atlas插件化框架在Fragment的onCreateView中动态加载bundle,发现只显示第一个bundle,往后滑动ViewPager,能够正常加载Fragment,但不能显示Fragment的挂载的bundle。

这是FragmentPagerAdapter的加载机制引起的,为了让客户有更好的体验,当我们使用ViewPager显示一个Fragment的时候,FragmentPagerAdapter会自动加载其两侧的Fragment。

FragmentPagerAdapter fragmentPagerAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) {
    @Override
    public Fragment getItem(int position) {
        return mFragmentList.get(position);
    }

    @Override
    public int getCount() {
        return mFragmentList.size();
    }
};
mViewPager.setAdapter(fragmentPagerAdapter);
mViewPager.setOffscreenPageLimit(5);
mViewPager.addOnPageChangeListener(this);
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_home, container, false);
    initDelegate(view, savedInstanceState);
    return view;
}

private void initDelegate(View view, Bundle savedInstanceState) {
    mActivityDelegate = new ActivityGroupDelegate(getActivity(), savedInstanceState);
    mActivityGroupContainer = (ViewGroup) view.findViewById(R.id.content);
    if (getActivity() != null) {
        AtlasDelegateHelper.switchToActivity(getActivity(), mActivityDelegate, mActivityGroupContainer,
                "home", "cn.appblog.home.ui.activity.HomeActivity");
    }
}

解决方法

复写Fragment的setUserVisibleHint方法,在Fragment显示时动态加载

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (isVisibleToUser && getActivity() != null) {
        AtlasDelegateHelper.switchToActivity(getActivity(), mActivityDelegate, mActivityGroupContainer,
                "home", "cn.appblog.home.ui.activity.HomeActivity");
    }
}
上一篇 Atlas:构建-基线发布-动态部署-远程bundle-单模块部署-发布bundle至私有Maven库
下一篇 Atlas插件bundle与host通信之接口方式
目录
文章列表
1 C++ ANSI及UTF-8与Unicode转码
C++ ANSI及UTF-8与Unicode转码
2
CentOS下部署Kafka
CentOS下部署Kafka
3
Android使用uiautomatorviewer获取控件
Android使用uiautomatorviewer获取控件
4
Arthas(阿尔萨斯) -- 阿里在线诊断神器
Arthas(阿尔萨斯) -- 阿里在线诊断神器
5
Spring Cloud Alibaba Sidecar 多语言微服务异构
Spring Cloud Alibaba Sidecar 多语言微服务异构
最新评论
一位WordPress评论者
一位WordPress评论者
2月12日
您好,这是一条评论。若需要审核、编辑或删除评论,请访问仪表盘的评论界面。评论者头像来自 Gravatar。