ViewPager经常用来连接Fragment,它很方便管理每个页面的生命周期,使用ViewPager管理Fragment是标准的适配器实现。最常用的实现一般有FragmentPagerAdapter和FragmentStatePagerAdapter。通过为UI添加ViewPager后,用户可以左右滑动屏幕,切换到不同的Fragment页面。
下面将通过一个简单的实例进行ViewPager和Fragment混合使用。

我们设计了三个按钮分别是首页、联系人和我的,并创建了3个Fragment页面。不但可以通过左右滑动实现页面切换,也可以通过按钮点击切换页面。下面我们来看一下详细代码。

一、创建一个Activity命名为FragmentViewPagerActivity.java和一个布局文件activity_view_pager.xml,具体代码如下:

activity_view_pager.xml

<?xml version="1.0" encoding="utf-8"?><RelativeLayout 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"    tools:context=".FragmentViewPagerActivity"    android:orientation="vertical">    <androidx.viewpager.widget.ViewPager        android:id="@+id/fragment_view_pager"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:layout_above="@+id/linear">    </androidx.viewpager.widget.ViewPager>    <LinearLayout        android:id="@+id/linear"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_alignParentBottom="true"        android:orientation="horizontal">        <Button            android:id="@+id/btn_previous"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="首页"            android:layout_weight="1">        </Button>        <Button            android:id="@+id/btn_middle"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="联系人"            android:layout_marginLeft="2dp"            android:layout_marginRight="2dp"            android:layout_weight="1">        </Button>        <Button            android:id="@+id/btn_next"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="我的"            android:layout_weight="1">        </Button>    </LinearLayout></RelativeLayout>

FragmentViewPagerActivity .java

package com.example.myapplication;import androidx.annotation.NonNull;import androidx.appcompat.app.AppCompatActivity;import androidx.fragment.app.Fragment;import androidx.fragment.app.FragmentManager;import androidx.fragment.app.FragmentPagerAdapter;import androidx.fragment.app.FragmentStatePagerAdapter;import androidx.viewpager.widget.ViewPager;import android.os.Bundle;import android.view.View;import android.widget.Button;public class FragmentViewPagerActivity extends AppCompatActivity{    private ViewPager viewPager;    private FragmentManager fragmentManager;    private Button mBtnPrevious;    private Button mBtnMiddle;    private Button mBtnNext;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_view_pager);        //初始化3个按钮,绑定布局文件的按钮控件并实现其点击事件        mBtnInit();        //绑定viewPager并获得fragmentManager实例        viewPager = findViewById(R.id.fragment_view_pager);        fragmentManager = getSupportFragmentManager();        //设置viewPager的起始页面和按钮的起始状态        viewPager.setCurrentItem(0);        mBtnPrevious.setBackgroundColor(0xFF87F00D);        //设置viewPager的Adapter,得到当前的Fragment页面        viewPager.setAdapter(new FragmentStatePagerAdapter(fragmentManager) {            @NonNull            @Override            public Fragment getItem(int position) {                return createFragment(position);            }            @Override            public int getCount() {                return 3;            }        });        //设置viewPager的界面改变监听        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {                        @Override            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {            }            @Override            public void onPageSelected(int position) {                clearAllBtnStatus();                switch (position){                    case 0:                        mBtnPrevious.setBackgroundColor(0xFF87F00D);                       break;                    case 1:                        mBtnMiddle.setBackgroundColor(0xFF87F00D);                        break;                    case 2:                        mBtnNext.setBackgroundColor(0xFF87F00D);                        break;                    default:                        break;                }            }            @Override            public void onPageScrollStateChanged(int state) {            }        });    }    //初始化3个按钮,绑定布局文件的按钮控件并实现其点击事件    private void mBtnInit() {        mBtnPrevious = findViewById(R.id.btn_previous);        mBtnMiddle = findViewById(R.id.btn_middle);        mBtnNext = findViewById(R.id.btn_next);        mBtnPrevious.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                viewPager.setCurrentItem(0);            }        });        mBtnMiddle.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                viewPager.setCurrentItem(1);            }        });        mBtnNext.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                viewPager.setCurrentItem(2);            }        });        clearAllBtnStatus();    }    //用于清除按钮的背景颜色状态    private void clearAllBtnStatus() {        mBtnPrevious.setBackgroundColor(0xffffffff);        mBtnMiddle.setBackgroundColor(0xffffffff);        mBtnNext.setBackgroundColor(0xffffffff);    }    //创建不同的Fragment页面    private  Fragment createFragment(int position) {        switch (position){            case 0:                return new FragmentOne();            case 1:                return new FragmentTwo();            case 2:                return new FragmentThree();            default:                break;        }        return null;    }}

二、分别创建3个Fragment的子类FragmentOne.java、FragmentTwo.java、FragmentThree.java和3个对用的fragment布局文件fragment_one.xml、fragment_two.xml、fragment_three.xml。代码如下:

FragmentOne.java

package com.example.myapplication;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;import androidx.annotation.NonNull;import androidx.annotation.Nullable;import androidx.fragment.app.Fragment;public class FragmentOne extends Fragment {    private TextView tvPrevious;    @Nullable    @Override    public View onCreateView(@NonNull LayoutInflater inflater,                             @Nullable ViewGroup container,                             @Nullable Bundle savedInstanceState) {        View view = inflater.inflate(R.layout.fragment_one,container,false);        tvPrevious = view.findViewById(R.id.tv_previous);        return view;    }}

fragment_one.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:background="#4CAF50"    android:orientation="vertical"    android:gravity="center">    <TextView        android:id="@+id/tv_previous"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:text="首页界面"        android:textSize="30sp"        android:textColor="#000000"        android:gravity="center">    </TextView></LinearLayout>

注意:本实例的FragmentTwo.java、FragmentThree.java与FragmentOne.java类似,fragment_two.xml、fragment_three.xml与fragment_one.xml类似,不再复述。

链接:百度网盘下载 提取码:3evu

推荐阅读:
Android——Fragment的静态注册和动态注册

更多相关文章

  1. Android(安卓)4.0.3 联系人(通讯录)应用源码学习
  2. Andriod应用开发--第二章作业1--习题答案
  3. 深入讲解WebView——下
  4. [置顶] Android屏幕适配全攻略(最权威的官方适配指导)
  5. Android之ConstraintLayout
  6. Android的Log图文详解(Log.v,Log.d,Log.i,Log.w,Log.e)!
  7. 使用约束布局(ConstraintLayout)构建灵活的UI
  8. Android程序开发基础之——页面布局
  9. Android开发---为按钮添加事件的三种方法

随机推荐

  1. Android(安卓)App 开源项目使用统计
  2. Android学习笔记19:ImageView实现图片适屏
  3. android 静默安装,含获取各种应用信息方法
  4. Android手机AP模式下本机IP
  5. Android(安卓)Hal 分析
  6. Android注解支持(Support Annotations)详
  7. Android音频架构性能分析
  8. [置顶] linux2.6驱动开发系列教程
  9. Android(安卓)Activity 中阻止自动弹出系
  10. Android提供两个常用的消息弹出框【Toast