zoukankan      html  css  js  c++  java
  • Android滑动导航菜单TabLayout+ViewPager+Fragment

    1.主要的Activity——MemberDetailActivity

    2.Activity视图的xml文件——R.layout.activity_member_detail

    3.自定义的Fragment子类——CustomTrainingFragment

    4.Fragment视图的xml文件——

    5.自定义Fragment子类的适配器

    //1.MemberDetailActivity
    package
    com.vimems.coach; import android.os.Bundle; import android.support.design.widget.TabLayout; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.view.ViewPager; import android.widget.TableLayout; import com.vimems.Adapter.CustomTrainingFragmentPageAdapter; import com.vimems.R; import java.util.ArrayList; import java.util.List; import util.BaseActivity; public class MemberDetailActivity extends BaseActivity { private CustomTrainingFragmentPageAdapter pageAdapter; private ViewPager viewPager; private TabLayout tabLayout; List<Fragment> fragmentList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_member_detail); // TODO: 2/10/2019 暂时用一个fragment代替 fragmentList=new ArrayList<>(); fragmentList.add(new CustomTrainingFragment()); fragmentList.add(new CustomTrainingFragment()); fragmentList.add(new CustomTrainingFragment()); FragmentManager fragmentManager=getSupportFragmentManager(); pageAdapter=new CustomTrainingFragmentPageAdapter(fragmentManager,fragmentList); viewPager=findViewById(R.id.training_mode_viewpager); tabLayout=findViewById(R.id.training_mode_tab); viewPager.setAdapter(pageAdapter); //让TabLayout与viewpager产生联动 tabLayout.setupWithViewPager(viewPager); } }
    //R.layout.activity_member_detail
    //包含一个TabLayout和一个ViewPager
    <?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical"> <TextView android:paddingTop="20dp" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/single_mode" android:gravity="center"/> <!--todo 可以改为一个TableLa+ViewPage--> <android.support.design.widget.TabLayout android:id="@+id/training_mode_tab" android:layout_width="match_parent" android:layout_height="wrap_content" app:tabMode="fixed" app:tabGravity="fill"> </android.support.design.widget.TabLayout> <android.support.v4.view.ViewPager android:id="@+id/training_mode_viewpager" android:layout_width="match_parent" android:layout_height="match_parent" > </android.support.v4.view.ViewPager> </android.support.v7.widget.LinearLayoutCompat>
    //3CustomTrainingFragment 
    package com.vimems.coach;
    
    import android.os.Bundle;
    import android.support.annotation.NonNull;
    import android.support.annotation.Nullable;
    import android.support.v4.app.Fragment;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    
    import com.vimems.R;
    
    public class CustomTrainingFragment extends Fragment {
        public static final String ARG_PAGE="ARG_PAGE";
        private int mPage;
    
    
        //使用newInstance的方式,或者在CustomTrainingFragmentPageAdapter中添加一个列表
    //    fragments=new ArrayList<>();
    //        //将提前写好三个Fragment添加到集合中
    //        fragments.add(new FirstFragment());
    //        fragments.add(new SecondFragment());
    //        fragments.add(new ThirdFragment());
    //    在适配器的构造方法中传入参数fragmentManage、fragments
    //    在适配器的getItem方法中return fragments.get(position)
        public static CustomTrainingFragment newInstance(int page){
    
            Bundle bundle=new Bundle();
            bundle.putInt(ARG_PAGE,page);
            CustomTrainingFragment customTrainingFragment=new CustomTrainingFragment();
            customTrainingFragment.setArguments(bundle);
            return customTrainingFragment;
        }
    
        @Override
        public void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            mPage=getArguments().getInt(ARG_PAGE);
        }
    
        @Nullable
        @Override
        public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
            View view=inflater.inflate(R.layout.fragment_custom_training,container,false);
            return view;
        }
    }
    //4.Fragment的布局文件,
    <?xml version="1.0" encoding="utf-8"?>
    <android.support.v7.widget.LinearLayoutCompat
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <android.support.v7.widget.LinearLayoutCompat
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:paddingLeft="10dp">
            <TextView
                android:text="@string/custom_training_options"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:gravity="center"
                android:textStyle="bold"
                />
            <RadioGroup
                android:id="@+id/custom_training_options"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="horizontal">
                <RadioButton
                    android:id="@+id/custom_training_options_gain_muscle"
                    android:text="@string/custom_training_options_gain_muscle"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"/>
                <RadioButton
                    android:id="@+id/custom_training_options_lose_fat"
                    android:text="@string/custom_training_options_lose_fat"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"/>
                <RadioButton
                    android:id="@+id/custom_training_options_shape"
                    android:text="@string/custom_training_options_shape"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"/>
                <RadioButton
                    android:id="@+id/custom_training_options_recovery"
                    android:text="@string/custom_training_options_recovery"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"/>
            </RadioGroup>
    
        </android.support.v7.widget.LinearLayoutCompat>
        <FrameLayout
            android:id="@+id/custom_training_options_fragment"
            android:layout_width="match_parent"
            android:layout_height="match_parent"></FrameLayout>
    
    </android.support.v7.widget.LinearLayoutCompat>
    //fragment的适配器CustomTrainingFragmentPageAdapter 
    package com.vimems.Adapter;
    
    import android.content.Context;
    import android.support.annotation.Nullable;
    import android.support.v4.app.Fragment;
    import android.support.v4.app.FragmentManager;
    import android.support.v4.app.FragmentPagerAdapter;
    
    import com.vimems.coach.CustomTrainingFragment;
    
    import java.util.List;
    
    import util.Constants;
    
    public class CustomTrainingFragmentPageAdapter extends FragmentPagerAdapter {
    
        private List<Fragment> fragmentList;
        private static final String[] tabTitle=Constants.TRAINING_MODE;
        public CustomTrainingFragmentPageAdapter(FragmentManager fm, List<Fragment> fragmentList) {
            super(fm);
            this.fragmentList=fragmentList;
        }
    
        @Override
        public Fragment getItem(int i) {
    //        用自定义Fragment的newInstance()方法返回一个实例
    //        return CustomTrainingFragment.newInstance(i);
            
    //        自定义的fragment列表
            return fragmentList.get(i);
            //return CustomTrainingFragment.newInstance(i+1);
        }
    
        @Override
        public int getCount() {
            return tabTitle.length;
        }
    
    
    // 添加tab的标题title
    // 如下这种使用方式好像不行
    //    mTabLayout = (TabLayout) findViewById(R.id.tabLayout);
    //    TabLayout.Tab tab1 = mTabLayout.newTab()
    //                //设置tab项显示的文字
    //                .setText("tab1");
    //     TabLayout.Tab tab2 = mTabLayout.newTab().setText("tab2");
    //    TabLayout.Tab tab3 = mTabLayout.newTab().setText("tab3");
    //        mTabLayout.addTab(tab1);
    //        mTabLayout.addTab(tab2);
    //        mTabLayout.addTab(tab3);
        @Nullable
        @Override
        public CharSequence getPageTitle(int position) {
            return tabTitle[position];
        }
    }

     

  • 相关阅读:
    .NET 去除一段文本中的HTML标记
    C#实现控件拖动窗口
    使用window.showModalDialog弹出窗口返回值(兼容IE、FF、chrome)
    IE浏览器报错出现stack overflow at line 0的解决办法
    用Python作GIS:原料篇
    winform 自定义控件:半透明Loading控件
    WPF 跟随鼠标动画 by wgscd
    C# 多线程 HTTP request
    VS2015 安装XAN
    C# 用QQ企业邮箱发邮件
  • 原文地址:https://www.cnblogs.com/sunupo/p/10360671.html
Copyright © 2011-2022 走看看