Viewpager+radiogroup+fragment

fragment1.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:gravity="center"

    android:orientation="vertical" >

    <TextView

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="第一页"

        android:textSize="30sp"/>

</LinearLayout>

activity_main.xml
<LinearLayout 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"
  android:orientation="vertical" >
  <android.support.v4.view.ViewPager
  android:id="@+id/viewpager"
  android:layout_width="match_parent"
  android:layout_height="0dp"
  android:layout_weight="1"/>
  <View
  android:id="@+id/divider"
  android:layout_width="50dp"
  android:layout_height="3dp"
  android:background="@android:color/black"/>
  <RadioGroup
  android:id="@+id/radioGroup"
  android:layout_width="match_parent"
  android:layout_height="60dp"
  android:gravity="center_vertical"
  android:orientation="horizontal"
  >

    <RadioButton
    android:id="@+id/btn1"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:button="@null"
    android:gravity="center"
    android:text="第一页"
    android:clickable="true"
    android:textColor="@color/btn"
    android:textSize="30sp" />

    <RadioButton
    android:id="@+id/btn2"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:button="@null"
    android:text="第二页"
    android:clickable="true"
    android:textColor="@color/btn"
    android:gravity="center"
    android:textSize="30sp" />
    <RadioButton
    android:id="@+id/btn3"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:button="@null"
    android:text="第三页"
    android:clickable="true"
    android:textColor="@color/btn"
    android:gravity="center"
    android:textSize="30sp" />

  </RadioGroup>
</LinearLayout>

 

Fragment1.java
public class Fragment1 extends Fragment {
  @Override
  public View onCreateView(LayoutInflater inflater,
  @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
  return inflater.inflate(R.layout.fragment1, null);
  }
}

代码实现
public class MainActivity extends FragmentActivity {

  private View line;// 指示线
  private int screenWidth;// 屏幕的宽度
  private ViewPager viewpager;
  private RadioGroup radioGroup;
  private RadioButton btn1,btn2,btn3;
  private FragmentTransaction fragmentTransaction;
  private List<Fragment> fragmentList;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    // 初始化界面
    viewpager = (ViewPager) findViewById(R.id.viewpager);
    radioGroup = (RadioGroup) findViewById(R.id.radioGroup);
    btn1 = (RadioButton) findViewById(R.id.btn1);
    btn2 = (RadioButton) findViewById(R.id.btn2);
    btn3 = (RadioButton) findViewById(R.id.btn3);
    line = findViewById(R.id.divider);

    // 获取片段管理器
    FragmentManager fragmentManager = getSupportFragmentManager();
    fragmentTransaction = fragmentManager.beginTransaction();
    // 界面显示时 默认按钮1被选择及显示第一个界面
    btn1.setChecked(true);
    fragmentTransaction.replace(R.id.viewpager, new Fragment1()).commit();
    // fragmentList用于存放片段 及 将片段添加进集合
    fragmentList = new ArrayList<Fragment>();
    Fragment fragment1 = new Fragment1();
    Fragment fragment2 = new Fragment2();
    Fragment fragment3 = new Fragment3();
    fragmentList.add(fragment1);
    fragmentList.add(fragment2);
    fragmentList.add(fragment3);

    // 获取屏幕的宽度
    DisplayMetrics outMetrics = new DisplayMetrics();
    getWindow().getWindowManager().getDefaultDisplay().getMetrics(outMetrics);
    screenWidth = outMetrics.widthPixels;
    // 设置指示线的宽度 获取控件的(注意:一定要用父控件的LayoutParams写LinearLayout.LayoutParams)
    LinearLayout.LayoutParams lp = (LayoutParams) line.getLayoutParams();// 获取控件的布局参数对象
    lp.width = screenWidth / fragmentList.size();
    line.setLayoutParams(lp);// 设置该控件的layoutParams参数

    // 对viewPager设置适配器FragmentPagerAdapter
    viewpager.setAdapter(new MyFragmentPagerAdapter(fragmentManager,fragmentList));
    // 对按钮设置监听 RadioButton切换Fragment
    radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {
      @Override
      public void onCheckedChanged(RadioGroup group, int checkedId) {

        switch (checkedId) {
          case R.id.btn1:
            viewpager.setCurrentItem(0, true);
            break;
          case R.id.btn2:
            viewpager.setCurrentItem(1, true);
            break;
          case R.id.btn3:
            viewpager.setCurrentItem(2, true);
            break;
        }
      }
    });

  // 对viewpager设置监听 viewpager切换fragment radiobutton做相应的改变
  viewpager.setOnPageChangeListener(new OnPageChangeListener() {

  // 当新的页面被选中时调用
  @Override
  public void onPageSelected(int position) {
    // ((RadioButton)radioGroup.getChildAt(position)).performClick();
      switch (position) {
        case 0:
          radioGroup.check(R.id.btn1);
          break;
        case 1:
          radioGroup.check(R.id.btn2);
          break;
        case 2:
          radioGroup.check(R.id.btn3);
          break;
      }
  }

  /**
  * 当前页面被滑动时调用 position:当前页面 positionOffset:当前页面偏移的百分比
  * positionOffsetPixels:当前页面偏移的像素位置
  */
  @Override
  public void onPageScrolled(int position, float positionOffset,
  int positionOffsetPixels) {
    LinearLayout.LayoutParams lp = (LayoutParams) line.getLayoutParams();
    // 获取组件距离左侧组件的距离
    lp.leftMargin = (int) ((positionOffset + position)* lp.width);
      line.setLayoutParams(lp);
  }

  /**
  * 当滑动状态改变时调用 state=0的时候表示什么都没做,就是停在那 state=1的时候表示正在滑动
  * state==2的时候表示滑动完毕了
  */
  @Override
  public void onPageScrollStateChanged(int state) {

  }
 });


private class MyFragmentPagerAdapter extends FragmentPagerAdapter {

  List<Fragment> list;
  public MyFragmentPagerAdapter(FragmentManager fm, List<Fragment> list) {
    super(fm);
    this.list = list;
  }
  @Override
  public Fragment getItem(int position) {
    return list.get(position);
  }
  @Override
  public int getCount() {
    return list.size();
  }
}

转载于:https://www.cnblogs.com/konekou/p/7699346.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值