FragmentTabHost+ViewPager实现滑动的底部导航栏

用FragmentTabhost+viewpager实现滑动的底部栏。

刚开始写的这几篇都是写底部导航栏,其实我只是想用不同的方式把不同的效果都实现一次,还有好几种方式能够实现的,可能再写一篇底部栏的就不写了。

先上效果图(找了一轮录屏软件发现还是找不到,最后还是用了应用宝的动态截图功能来生成gif)

这里写图片描述

我这些例子都是用相同的例子就不说了,你们可以看我上两篇。

这次结合了ViewPager的使用,后面实现广告栏和引导时还会用到ViewPager。
实现的方法其实就是监听viewpager的onpagerchange的时候改变fragmenttabhost的tab,如下:

       @Override
       public void onPageSelected(int position) {
              tabhost.setCurrentTab(position);
        }

同时监听fragmenttabhost的onTabChanged,然后为viewpager设置相应的页面,如下:

        @Override
        public void onTabChanged(String tabId) {
            int position = tabhost.getCurrentTab();
            viewpager.setCurrentItem(position);
        }

既然用到viewpager,那就先创建一个fragmentPagerAdapter,代码如下:

public class ViewPagerAdaper extends FragmentPagerAdapter{

private List<Fragment> fragments;
public ViewPagerAdaper(FragmentManager fm,List<Fragment> fragments) {
    super(fm);
    this.fragments = fragments;
}

@Override
public Fragment getItem(int position) {
    return fragments.get(position);
}

@Override
public int getCount() {
    return fragments.size();
}
}

那么再看一下主界面布局吧,代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.view.ViewPager
    android:id="@+id/viewpager"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    >
</android.support.v4.view.ViewPager>

<android.support.v4.app.FragmentTabHost
    android:id="@+id/tabhost"
    android:background="#ffffff"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
</android.support.v4.app.FragmentTabHost>
</LinearLayout>

其实主界面的代码也挺简单的,我就直接上代码了,代码如下:

public class TabViewPagerActivity extends AppCompatActivity {

private ViewPager viewpager;
private FragmentTabHost tabhost;
private Class[] fragments = new Class[]{
        HomeFragment.class, ShopCarFragment.class, MineFragment.class
};
private int[] tabimgs = new int[]{
        R.drawable.home_selector,R.drawable.shopcar_selector,
        R.drawable.mine_selector
};
private String[] titles = new String[]{"首页","购物车","我的"};
private List<Fragment> fragmentlists = new ArrayList<Fragment>();
private ViewPagerAdaper mAdapter;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_tabviewpager);
    initView();
    initTabs();
    initViewPager();
}

/**
 * 初始化viewpager
 */
private void initViewPager() {
    HomeFragment homefragment = new HomeFragment();
    MineFragment minefragment = new MineFragment();
    ShopCarFragment shopcarfragment = new ShopCarFragment();
    fragmentlists.add(homefragment);
    fragmentlists.add(shopcarfragment);
    fragmentlists.add(minefragment);
    mAdapter = new ViewPagerAdaper(getSupportFragmentManager(),fragmentlists);
    viewpager.setAdapter(mAdapter);
    viewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        }
        @Override
        public void onPageSelected(int position) {
            //当滑动到该的时候,设置对应的tab
                tabhost.setCurrentTab(position);
        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });
}

/**
 * 设置tab
 */
private void initTabs() {
    tabhost.setup(this,getSupportFragmentManager(),R.id.viewpager);
    for (int i = 0; i < fragments.length; i++) {
        View tabview = getLayoutInflater().inflate(R.layout.tab_item,null);
        ImageView tab_img = (ImageView) tabview.findViewById(R.id.tab_img);
        TextView tab_title = (TextView) tabview.findViewById(R.id.tab_title);
        tab_img.setImageResource(tabimgs[i]);
        tab_title.setText(titles[i]);
        tabhost.addTab(tabhost.newTabSpec(""+i).setIndicator(tabview),fragments[i],null);
    }
    tabhost.getTabWidget().setDividerDrawable(null);
    tabhost.setCurrentTab(0);
    tabhost.setOnTabChangedListener(new TabHost.OnTabChangeListener() {
        @Override
        public void onTabChanged(String tabId) {
            int position = tabhost.getCurrentTab();
            viewpager.setCurrentItem(position);
        }
    });
}

private void initView() {
    viewpager = (ViewPager) findViewById(R.id.viewpager);
    tabhost = (FragmentTabHost) findViewById(R.id.tabhost);
}
}

项目github地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值