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的静态注册和动态注册