Android顶部Fragment+Tab+Viewpager导航栏实现和Fragment-fragment页面刷新不出来解决办法

欢迎大家能够认真阅读这篇实战文章!我上的是最简单的顶部导航栏切换代码!和切换底部Tab 顶部导航栏刷新不出来的问题!虽然耗费时间才找到的问题 !我直接给大家做全,就不用在去查找了 ! 以及遇到的问题如何解决! 这些都是其它博主没给到的!

Android顶部Fragment+Tab+Viewpager导航栏实现(以4个界面为例)

第一步:准备使用的 4个 Fragment + fragment.xml 配对 , 还有一个 主MainActivity 或者 底部TabFragment 这俩个下面会详细介绍
Fragment.class文件
对应的.xml文件

二. 主要讲讲主Fragment 和 Adapter 怎么编写代码!下面直接上代码

a.主xml 界面代码 TabLayout 里面的属性自行查阅 太多就不一一解释了 入行的大概也能看懂

//这个是顶部导航栏的TabLayout
<android.support.design.widget.TabLayout
android:id="@+id/tabLayout"
android:layout_width=“match_parent”
android:layout_height=“wrap_content”
app:tabIndicatorColor="@color/light"
app:tabIndicatorHeight=“2dp”
app:tabTextColor="#fff"
app:tabSelectedTextColor="#fff"
app:tabMode=“scrollable”
/>

//这个是填充Fragment的ViewPager
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_below="@+id/tabLayout"
android:layout_width=“match_parent”
android:layout_height=“match_parent”
android:layout_weight=“1” />

b.主Fragment代码

需要创建的对象
private View view;
private TabLayout mTabLayout;
private ViewPager mViewPager;
private BriefFragmentAdapter briefFragmentAdapter;
private TabLayout.Tab one;
private TabLayout.Tab two;
private TabLayout.Tab three;
private TabLayout.Tab four;

//使用适配器将ViewPager与Fragment绑定在一起
mViewPager = (ViewPager) view.findViewById(R.id.viewPager);
briefFragmentAdapter = new BriefFragmentAdapter(getActivity(), getChildFragmentManager());
mViewPager.setAdapter(briefFragmentAdapter);
// 将TabLayout与ViewPager绑定在一起
mTabLayout = (TabLayout) view.findViewById(R.id.tabLayout);
mTabLayout.setupWithViewPager(mViewPager);
// 指定Tab的位置
one = mTabLayout.getTabAt(0);
two = mTabLayout.getTabAt(1);
three = mTabLayout.getTabAt(2);
four = mTabLayout.getTabAt(3);

c. 接下来就是适配器了Adapter

public class BriefFragmentAdapter extends FragmentPagerAdapter {
private String[] mt = new String[]{“博信简介”, “总裁致辞”, “研发中心”, “生产设备”,“博信荣誉”};
private Context context;
public BriefFragmentAdapter(Context context, FragmentManager fm) {
super(fm);
this.context = context;
}

@Override
public Fragment getItem(int position) {
    if (position == 1) {
        return new BriefSpeechFragment();
    } else if (position == 2) {
        return new BriefCenterFragment();
    } else if (position == 3) {
        return new BriefProduceFragment();
    }
           return new BriefBoxinFragment();
}



@Override
public int getCount() {

    return mt.length;
}



@Override
public int getItemPosition(Object object) {
    return PagerAdapter.POSITION_NONE;
}

@Override
public CharSequence getPageTitle(int position) {
    return mt[position];
}

}
这是效果图
到这里也就完成了 顶部导航栏这个效果 接下来说说我遇到的问题

初始加载顶部导航是显示数据的 但在Tab切换后在回到导航Tab的时候 数据丢失 显示空白 最后查找是Fragment加载到ViewPager 数据没刷新的问题;主要就是getChildFragmentManager()这个方法没使用对

第一种:在Activity的时候使用
briefFragmentAdapter = new BriefFragmentAdapter(getActivity(), getSupportFragmentManager());
第二种:在Fragment的时候使用
briefFragmentAdapter = new BriefFragmentAdapter(getActivity(), getChildFragmentManager());

getChildFragmentManager()

getSupportFragmentManager()

大家可以对比下 ! 谢谢 观赏! 欢迎评论区讨论
部分 借鉴 网上资源 !大家可以参考下
https://www.jianshu.com/p/ce1d060573ba

猜你喜欢

转载自blog.csdn.net/weixin_43148719/article/details/83016965