Android——ViewPager和Fragment混合使用(含源码下载)
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的静态注册和动态注册
更多相关文章
- Android(安卓)4.0.3 联系人(通讯录)应用源码学习
- Andriod应用开发--第二章作业1--习题答案
- 深入讲解WebView——下
- [置顶] Android屏幕适配全攻略(最权威的官方适配指导)
- Android之ConstraintLayout
- Android的Log图文详解(Log.v,Log.d,Log.i,Log.w,Log.e)!
- 使用约束布局(ConstraintLayout)构建灵活的UI
- Android程序开发基础之——页面布局
- Android开发---为按钮添加事件的三种方法