1 Fragment与Viewpager适配器
1.1 FragmentPageAdapter
- 用于实现Fragment的滑动效果,使用Fragment来填充ViewPager
- 适用于页面比较少的情况,FragmentPagerAdapter消耗更多的内存
- 它会把每一个Fragment保存在内存 中,不用每次切换的时候,去保存现场,切换回来在重新创建,所以用户体验比较好
- 而对 于
Fragment
比较多的情况,需要切换的时候销毁以前的Fragment以释放内存,就可以使用 FragmentStatePagerAdapter
1.2 FragmentStatePagerAdapter
- 用于实现Fragment的滑动效果, 使用Fragment来填充ViewPager
- 适用于页面比较多的情况,FragmentStatePagerAdapter省内存
2 创建 FragmentPageAdapter 适配器
- 重写获取页面的方法
public Fragment getItem(int position) { return fragmentList.get(position); }
- 重写获取长度的方法
public int getCount() { return fragmentList.size(); }
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
import java.util.List;
public class MyFragmentPagerAdapter extends FragmentPagerAdapter {
private List<Fragment> fragmentList;
public MyFragmentPagerAdapter(@NonNull FragmentManager fm, List<Fragment> listFragment) {
super(fm);
this.fragmentList = listFragment;
}
public MyFragmentPagerAdapter(FragmentManager fm, int behavior) {
super(fm, behavior);
}
@NonNull
@Override
public Fragment getItem(int position) {
return fragmentList.get(position);
}
@Override
public int getCount() {
return fragmentList.size();
}
}
2.1 切换不同的Fragment
private void showFragment(int position) {
viewPager.setCurrentItem(position);
}
2.2 ViewPager滑动监听
public class MyPageChangeListener implements ViewPager.OnPageChangeListener {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
if (position == 0) {
tab_1.setBackgroundColor(Color.RED);
tab_2.setBackgroundColor(Color.WHITE);
tab_3.setBackgroundColor(Color.WHITE);
} else if (position == 1) {
tab_1.setBackgroundColor(Color.WHITE);
tab_2.setBackgroundColor(Color.RED);
tab_3.setBackgroundColor(Color.WHITE);
} else if (position == 2) {
tab_1.setBackgroundColor(Color.WHITE);
tab_2.setBackgroundColor(Color.WHITE);
tab_3.setBackgroundColor(Color.RED);
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
}
3 UI部分代码
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.viewpager.widget.ViewPager;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private TextView tab_1, tab_2, tab_3;
private ViewPager viewPager;
private List<Fragment> fragmentList;
private MyFragmentPagerAdapter myFragmentPagerAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initUI();
initTab();
}
private void initUI() {
tab_1 = findViewById(R.id.tab_1);
tab_2 = findViewById(R.id.tab_2);
tab_3 = findViewById(R.id.tab_3);
tab_1.setOnClickListener(this);
tab_2.setOnClickListener(this);
tab_3.setOnClickListener(this);
viewPager = findViewById(R.id.my_view_Pager);
}
private void initTab() {
FragmentOne fragmentOne = new FragmentOne();
FragmentTwo fragmentTwo = new FragmentTwo();
FragmentThree fragmentThree = new FragmentThree();
fragmentList = new ArrayList<>();
fragmentList.add(fragmentOne);
fragmentList.add(fragmentTwo);
fragmentList.add(fragmentThree);
myFragmentPagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager(),fragmentList);
viewPager.setAdapter(myFragmentPagerAdapter);
viewPager.addOnPageChangeListener(new MyPageChangeListener());
showFragment(0);
}
private void showFragment(int position) {
viewPager.setCurrentItem(position);
if (position == 0) {
tab_1.setBackgroundColor(Color.RED);
tab_2.setBackgroundColor(Color.WHITE);
tab_3.setBackgroundColor(Color.WHITE);
} else if (position == 1) {
tab_1.setBackgroundColor(Color.WHITE);
tab_2.setBackgroundColor(Color.RED);
tab_3.setBackgroundColor(Color.WHITE);
} else if (position == 2) {
tab_1.setBackgroundColor(Color.WHITE);
tab_2.setBackgroundColor(Color.WHITE);
tab_3.setBackgroundColor(Color.RED);
}
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.tab_1) {
showFragment(0);
} else if (v.getId() == R.id.tab_2) {
showFragment(1);
} else if (v.getId() == R.id.tab_3) {
showFragment(2);
}
}
public class MyPageChangeListener implements ViewPager.OnPageChangeListener {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
if (position == 0) {
tab_1.setBackgroundColor(Color.RED);
tab_2.setBackgroundColor(Color.WHITE);
tab_3.setBackgroundColor(Color.WHITE);
} else if (position == 1) {
tab_1.setBackgroundColor(Color.WHITE);
tab_2.setBackgroundColor(Color.RED);
tab_3.setBackgroundColor(Color.WHITE);
} else if (position == 2) {
tab_1.setBackgroundColor(Color.WHITE);
tab_2.setBackgroundColor(Color.WHITE);
tab_3.setBackgroundColor(Color.RED);
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
}
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210505104541454.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0Nzc2MDY1,size_16,color_FFFFFF,t_70)