实现一个Activity中两个Fragment的滑动,切换

实现类似效果:(由RadioButton和ViewPager,RadioButton控制在ViewPager中显示哪个Fragment)

QQ图片20170518113031.png

一、首先,先看Activity的代码:

 public class MaintainActivity extends BaseActionbarActivity  implements 
 RadioGroup.OnCheckedChangeListener{

private ViewPager mViewPager;
private ArrayList<Fragment> fragments = new ArrayList<>();
private FragmentAdapter fAdapter;
private RadioGroup radioGroup;

private RadioButton keepWorkLeft;
private RadioButton keepWorkRight;

private  UndoneFragment first;
private  DoneFragment second;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_maintain);

    mViewPager = (ViewPager)findViewById(R.id.keepWorkViewPager);
    keepWorkLeft = (RadioButton) findViewById(R.id.keepWorkLeft);
    keepWorkRight = (RadioButton) findViewById(R.id.keepWorkRight);
    keepWorkLeft.setSelected(true);
    keepWorkRight.setSelected(false);

    first = new UndoneFragment();
    second = new DoneFragment();
    fragments.add(first);
    fragments.add(second);

     //  getSupportFragmentManager()方法想要使用,Activity需要继承类-FragmentActivity。
    fAdapter = new FragmentAdapter(getSupportFragmentManager(), fragments);
    mViewPager.setAdapter(fAdapter);

    radioGroup = (RadioGroup)findViewById(R.id.radio_group_undone);
    radioGroup.check(R.id.keepWorkLeft);
    radioGroup.setOnCheckedChangeListener(this);// 设置监听器

    mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        }
        @Override
        public void onPageSelected(int position) {
            if (position == NumberConstant.ZERO) {
                radioGroup.check(R.id.keepWorkLeft);
                keepWorkLeft.setTextColor(Color.WHITE);
                keepWorkRight.setTextColor(Color.rgb(39, 132, 210));
                keepWorkLeft.setSelected(true);
                keepWorkRight.setSelected(false);

            } else if (position == NumberConstant.ONE) {
                radioGroup.check(R.id.keepWorkRight);
                keepWorkLeft.setTextColor(Color.rgb(39, 132, 210));
                keepWorkRight.setTextColor(Color.WHITE);
                keepWorkLeft.setSelected(false);
                keepWorkRight.setSelected(true);
            }
        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });

}

@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {

    if (checkedId == R.id.keepWorkLeft) {
        keepWorkLeft.setTextColor(Color.WHITE);
        keepWorkRight.setTextColor(Color.rgb(39, 132, 210));
        mViewPager.setCurrentItem(NumberConstant.ZERO, true);//这里是两个常量来区分是欢动哪一个frament
        keepWorkLeft.setSelected(true);
        keepWorkRight.setSelected(false);
    } else if (checkedId == R.id.keepWorkRight) {
        keepWorkLeft.setTextColor(Color.rgb(39, 132, 210));
        keepWorkRight.setTextColor(Color.WHITE);
        mViewPager.setCurrentItem(NumberConstant.ONE, true);
        keepWorkLeft.setSelected(false);
        keepWorkRight.setSelected(true);
    }

}

二、资源文件

   <?xml version="1.0" encoding="utf-8"?>
  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   >
<RadioGroup
    android:layout_below="@+id/a"
    android:layout_marginTop="7dp"
    android:id="@+id/radio_group_undone"
    android:layout_width="200dp"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:orientation="horizontal" >

    <RadioButton
        android:id="@+id/keepWorkLeft"
        android:background="@drawable/radie_bg"
        android:layout_width="wrap_content"
        android:layout_height="30dp"
        android:layout_weight="0.98"
        android:button="@null"
        android:checked="true"
        android:gravity="center"
        android:text="未完成"
        android:textColor="#fff"
        android:textSize="18sp" />

    <RadioButton
        android:id="@+id/keepWorkRight"
        android:background="@drawable/radie_bg1"
        android:layout_width="wrap_content"
        android:layout_height="30dp"
        android:layout_weight="1.0"
        android:textColor="#2784d2"
        android:button="@null"
        android:gravity="center"
        android:text="已完成"
        android:textSize="18sp" />
</RadioGroup>

<android.support.v4.view.ViewPager
    android:layout_marginTop="7dp"
    android:id="@+id/keepWorkViewPager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@id/radio_group_undone" >
</android.support.v4.view.ViewPager>

</RelativeLayout>

三、FragmentAdapter

 public class FragmentAdapter extends FragmentStatePagerAdapter{

public static ArrayList<Fragment> mData = new ArrayList<>();

FragmentManager fm;

public FragmentAdapter(FragmentManager fm) {
    super(fm);
    this.fm = fm;
}

public FragmentAdapter(FragmentManager fm, ArrayList<Fragment> datas) {
    super(fm);
    this.fm = fm;
    this.mData = datas;
}

@Override
public Fragment getItem(int position) {
    return mData.get(position);
}

@Override
public int getCount() {
    return mData.size();
}


@Override
public void destroyItem(ViewGroup container, int position, Object object) {
    super.destroyItem(container, position, object);
}

@Override
public Object instantiateItem(ViewGroup container, int position) {
    return super.instantiateItem(container, position);
}
/**
 * 加载数据
 *
 * @param datas 碎片集合
 *
 * created at 2016-12-12 下午 4:38
 */
public void addFragments(ArrayList<Fragment> datas){
    this.mData=datas;
    notifyDataSetChanged();
}

/**
 * 清楚数据
 *
 * created at 2016-12-12 下午 4:40
 */
public void removeAll(){
    this.mData.clear();
}


public void setFragments(ArrayList fragments) {
    if (this.mData != null) {
        FragmentTransaction ft = fm.beginTransaction();
        for (Fragment f : this.mData) {
            ft.remove(f);
        }
        ft.commit();
        ft = null;
        fm.executePendingTransactions();
    }
    this.mData = fragments;
    notifyDataSetChanged();
}
}

四、其实主要就是RadioButton和ViewPager

  • 在ViewPager中加载不同的Fragment(其实自己也可以加载多个)。
  • 用两个RadioButton,做出互斥效果。
  • 不同的RadioButton被点击的时候显示不同的Fragment。
  • 还有就是FragmentAdapter,注意FragmentAdapter的使用。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容