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];
        }
    }

     

  • 相关阅读:
    笨方法学python中执行argv提示ValueError: not enough values to unpack (expected 4, got 1)
    VMware workstation安装
    Redis bigkey分析
    MySQL drop table 影响及过程
    MySQL 大表硬连接删除
    ES elasticsearch 各种查询
    ES elasticsearch 各种聚合
    ES elasticsearch 聚合统计
    ES elasticsearch 实现 count单字段,分组取前多少位,以地理位置中心进行统计
    MySQL行溢出、varchar最多能存多少字符
  • 原文地址:https://www.cnblogs.com/sunupo/p/10360671.html
Copyright © 2011-2022 走看看