实现类似效果:(由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的使用。