zoukankan      html  css  js  c++  java
  • ViewPager+Fragment实现支持左右滑动的Tab

    主要思想:顶部标题栏top.xml,中间ViewPager(4个Fragment),底部导航

    top.xml和bottom.xml在我之前的两个随笔里有,此处不再赘述。

    activity_main.xml具体实现:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    
    <include layout="@layout/top" />
    
    <android.support.v4.view.ViewPager
    android:id="@+id/id_viewpager"
    android:layout_width="fill_parent"
    android:layout_height="0dp"
    android:layout_weight="1" >
    </android.support.v4.view.ViewPager>
    
    <include layout="@layout/bottom" />
    
    </LinearLayout>

    不同的是MainActivity.java文件的实现。

    MainActivity.java具体实现:

    package com.imooc.tab03;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import android.os.Bundle;
    import android.support.v4.app.Fragment;
    import android.support.v4.app.FragmentActivity;
    import android.support.v4.app.FragmentPagerAdapter;
    import android.support.v4.view.ViewPager;
    import android.support.v4.view.ViewPager.OnPageChangeListener;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.Window;
    import android.widget.ImageButton;
    import android.widget.LinearLayout;
    
    public class MainActivity extends FragmentActivity implements OnClickListener
    {
    private ViewPager mViewPager;
    private FragmentPagerAdapter mAdapter;
    private List<Fragment> mFragments;
    
    private LinearLayout mTabWeixin;
    private LinearLayout mTabFrd;
    private LinearLayout mTabAddress;
    private LinearLayout mTabSettings;
    
    private ImageButton mImgWeixin;
    private ImageButton mImgFrd;
    private ImageButton mImgAddress;
    private ImageButton mImgSettings;
    
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.activity_main);
    
    initView();
    initEvent();
    
    setSelect(1);
    }
    
    private void initEvent()
    {
    mTabWeixin.setOnClickListener(this);
    mTabFrd.setOnClickListener(this);
    mTabAddress.setOnClickListener(this);
    mTabSettings.setOnClickListener(this);
    }
    
    private void initView()
    {
    mViewPager = (ViewPager) findViewById(R.id.id_viewpager);
    
    mTabWeixin = (LinearLayout) findViewById(R.id.id_tab_weixin);
    mTabFrd = (LinearLayout) findViewById(R.id.id_tab_frd);
    mTabAddress = (LinearLayout) findViewById(R.id.id_tab_address);
    mTabSettings = (LinearLayout) findViewById(R.id.id_tab_settings);
    
    mImgWeixin = (ImageButton) findViewById(R.id.id_tab_weixin_img);
    mImgFrd = (ImageButton) findViewById(R.id.id_tab_frd_img);
    mImgAddress = (ImageButton) findViewById(R.id.id_tab_address_img);
    mImgSettings = (ImageButton) findViewById(R.id.id_tab_settings_img);
    
    mFragments = new ArrayList<Fragment>();
    Fragment mTab01 = new WeixinFragment();
    Fragment mTab02 = new FrdFragment();
    Fragment mTab03 = new AddressFragment();
    Fragment mTab04 = new SettingFragment();
    mFragments.add(mTab01);
    mFragments.add(mTab02);
    mFragments.add(mTab03);
    mFragments.add(mTab04);
    
    mAdapter = new FragmentPagerAdapter(getSupportFragmentManager())
    {
    
    @Override
    public int getCount()
    {
    return mFragments.size();
    }
    
    @Override
    public Fragment getItem(int arg0)
    {
    return mFragments.get(arg0);
    }
    };
    mViewPager.setAdapter(mAdapter);
    
    mViewPager.setOnPageChangeListener(new OnPageChangeListener()
    {
    
    @Override
    public void onPageSelected(int arg0)
    {
    int currentItem = mViewPager.getCurrentItem();
    setTab(currentItem);
    }
    
    @Override
    public void onPageScrolled(int arg0, float arg1, int arg2)
    {
    // TODO Auto-generated method stub
    
    }
    
    @Override
    public void onPageScrollStateChanged(int arg0)
    {
    // TODO Auto-generated method stub
    
    }
    });
    }
    
    @Override
    public void onClick(View v)
    {
    switch (v.getId())
    {
    case R.id.id_tab_weixin:
    setSelect(0);
    break;
    case R.id.id_tab_frd:
    setSelect(1);
    break;
    case R.id.id_tab_address:
    setSelect(2);
    break;
    case R.id.id_tab_settings:
    setSelect(3);
    break;
    
    default:
    break;
    }
    }
    
    private void setSelect(int i)
    {
    setTab(i);
    mViewPager.setCurrentItem(i);
    }
    
    private void setTab(int i)
    {
    resetImgs();
    // 设置图片为亮色
    // 切换内容区域
    switch (i)
    {
    case 0:
    mImgWeixin.setImageResource(R.drawable.tab_weixin_pressed);
    break;
    case 1:
    mImgFrd.setImageResource(R.drawable.tab_find_frd_pressed);
    break;
    case 2:
    mImgAddress.setImageResource(R.drawable.tab_address_pressed);
    break;
    case 3:
    mImgSettings.setImageResource(R.drawable.tab_settings_pressed);
    break;
    }
    }
    
    /**
    * 切换图片至暗色
    */
    private void resetImgs()
    {
    mImgWeixin.setImageResource(R.drawable.tab_weixin_normal);
    mImgFrd.setImageResource(R.drawable.tab_find_frd_normal);
    mImgAddress.setImageResource(R.drawable.tab_address_normal);
    mImgSettings.setImageResource(R.drawable.tab_settings_normal);
    }
    
    }
  • 相关阅读:
    【Azure 应用服务】在Azure App Service多实例的情况下,如何在应用中通过代码获取到实例名(Instance ID)呢?
    【Azure 应用服务】App Service For Windows 中如何设置代理实现前端静态文件和后端Java Spring Boot Jar包
    【Azure Developer】使用Azure Key Vault 的Key签名后,离线验证的一些参考资料
    【Azure Function】调试 VS Code Javascript Function本地不能运行,报错 Value cannot be null. (Parameter 'provider')问题
    【Azure 应用服务】App Service 使用Tomcat运行Java应用,如何设置前端网页缓存的相应参数呢(Xms512m Xmx1204m)?
    【Azure API 管理】APIM添加Logtoeventhub的策略后,一些相关APIM与Event Hub的问题
    【Azure API 管理】为调用APIM的请求启用Trace 调试APIM Policy的利器
    【Azure 事件中心】China Azure上是否有Kafka服务简答
    【Azure 应用服务】探索在Azure上设置禁止任何人访问App Service的默认域名(Default URL)
    【Azure 微服务】记一次错误的更新Service Fabric 证书而引发的集群崩溃而只能重建
  • 原文地址:https://www.cnblogs.com/rainmer/p/4255064.html
Copyright © 2011-2022 走看看