①首先创建一个空项目。在对应的layout文件中,使用linearlayout布局,上面为一个androidx.viewpager.widget.ViewPager,下面是一个RadioGroup,根据自己的情况,可以设置radiobutton。
代码如下:省略了几个RadioButton
<androidx.viewpager.widget.ViewPager
android:id="@+id/vp_dist"
android:layout_weight="10"
android:layout_width="match_parent"
android:layout_height="0dp"/>
<RadioGroup
android:id="@+id/rg_navi"
android:layout_weight="1"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="0dp">
<RadioButton
android:id="@+id/rb_1"
android:text="窗口1"
android:checked="true"
android:button="@null"
android:textColor="@color/navi_selector"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"/>
</RadioGroup>
②有多少个按钮就创建多少个Fragment
New->Fragment->Fragment(Blank)
其中的代码保持为如下即可,记住,要有对应的layout文件,为每个布局需要显示的内容。inflate参数第一个参数,为对应的layout文件名
public class Fragment1 extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_1, container, false);
}
}
③mainactivity的代码
主要分几步,设置ViewPager的适配器,然后为viewpager和radiogroup分别设置监听即可。
public class MainActivity extends AppCompatActivity {
private ViewPager viewPager;
private RadioGroup radioGroup;
private List<Fragment> pages;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
radioGroup=findViewById(R.id.rg_navi);
viewPager=findViewById(R.id.vp_dist);
//为viewpager设置适配器
pages=new ArrayList<>();
pages.add(new Fragment1());
pages.add(new Fragment2());
pages.add(new Fragment3());
pages.add(new Fragment4());
viewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
@NonNull
@Override
//得到显示页面的位置
public Fragment getItem(int position) {
return pages.get(position);
}
@Override
public int getCount() {
return pages.size();
}
});
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
//当页面左右滚动时会触发
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
//页面已经滑动成功了,手指抬起来时会触发,position表示当前滑动到的页面,页面从0-len-1
public void onPageSelected(int position) {
//radioGroup的getChildAt方法,字button的序号从0开始,按照布局中定义,从0依次递增
RadioButton radioButton= (RadioButton) radioGroup.getChildAt(position);
radioButton.setChecked(true);
}
@Override
//state为0 1 2当用手指滑动翻页时,手指按下去的时候会触发这个方法,state值为1,手指抬起时,如果发生了滑动(即使很小),这个值会变为2,
// 然后最后变为0 。总共执行这个方法三次。一种特殊情况是手指按下去以后一点滑动也没有发生,这个时候只会调用这个方法两次,state值分别是1,0
public void onPageScrollStateChanged(int state) {
}
});
//设置监听器
radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup radioGroup, int i) {
for(int j=0;j<radioGroup.getChildCount();j++){
if(radioGroup.getChildAt(j).getId()==i){
viewPager.setCurrentItem(j);
return;
}
}
}
});
}
}