布局很简单,一个viewpage加一个RadioGroup实现。
布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.xuxuxiao.sshapp.MainActivity">
<android.support.v4.view.ViewPager
android:id="@+id/viewpage"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="#fff"/>
<RadioGroup
android:id="@+id/select_group"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#d2caca"
android:orientation="horizontal"
>
<RadioButton
android:id="@+id/select_news"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="新闻"
style="@style/style_RadioButton"
android:drawableTop="@drawable/news_select"
>
</RadioButton>
<RadioButton
android:id="@+id/select_other"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="其他"
style="@style/style_RadioButton"
android:drawableTop="@drawable/other_select"
/>
<RadioButton
android:id="@+id/select_my"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="其他"
style="@style/style_RadioButton"
android:drawableTop="@drawable/my_select"
/>
</RadioGroup>
</LinearLayout>
这里关于radiobutton如何适应图片大小上一个博客已经讲过。
既然三个radiobutton,就意味着三个fragment。所以需要另外写fragment,这里就不介绍了。
下面是如何初始化,如何实现不同fragment的切换。提一下,fragment视图出现的地方就是在viewpage上。
public class MainActivity extends BaseActivity {
private ViewPager viewpage;
private RadioButton select_news;
private RadioButton select_other;
private RadioButton select_my;
private RadioGroup select_group;
NewsFragment newsFragment=new NewsFragment();
OtherFragment otherFragment=new OtherFragment();
MyFragment myFragment=new MyFragment();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
initView();
}
private void initView() {
viewpage = (ViewPager) findViewById(R.id.viewpage);
select_news = (RadioButton) findViewById(R.id.select_news);
select_other = (RadioButton) findViewById(R.id.select_other);
select_my = (RadioButton) findViewById(R.id.select_my);
select_group = (RadioGroup) findViewById(R.id.select_group);
select_group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup radioGroup, int i) {
switch (i){
case R.id.select_news:
viewpage.setCurrentItem(0,false);
break;
case R.id.select_other:
viewpage.setCurrentItem(1,false);
break;
case R.id.select_my:
viewpage.setCurrentItem(2,false);
break;
default:
break;
}
}
});
final List<Fragment> firstlist=new ArrayList<Fragment>();
firstlist.add(newsFragment);
firstlist.add(otherFragment);
firstlist.add(myFragment);
final MyFragmentPagerAdapter firstadapter =new MyFragmentPagerAdapter(getSupportFragmentManager(),firstlist);
viewpage.setAdapter(firstadapter);
viewpage.setCurrentItem(0);
viewpage.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
switch (position){
case 0:
select_group.check(R.id.select_news);
break;
case 1:
select_group.check(R.id.select_other);
break;
case 2:
select_group.check(R.id.select_my);
break;
default:
break;
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
}
先给radiogroup设置点击事件,根据radiobutton的id的不同,确认出你想要切换的fragment。其中
viewpage.setCurrentItem(0,false);
这个里面数字就是指viewpage适配器中数据源中的第几个fragment,这个后面再讲。
在给viewpage设置页面切换监听,根据每次切换完的页面,给radiogroup设置是第几个button被点击。
最后,需要给viewpage设置适配器,代码如下
adapter:
public class MyFragmentPagerAdapter extends FragmentPagerAdapter {
private 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();
}
private int mChildCount = 0;
@Override
public void notifyDataSetChanged() {
mChildCount = getCount();
super.notifyDataSetChanged();
}
@Override
public int getItemPosition(Object object) {
if ( mChildCount > 0) {
mChildCount --;
return POSITION_NONE;
}
return super.getItemPosition(object);
}
}