以前在网上找到过Tabhost+RadioButton 组合成为五个可切换的页面,类似新浪微博和QQ 4.0.2. 后来开发过程中发现Tabhost 越来越不受待见,纷纷希望找替代品。
我看了下,ViewPager可以完美的替代Tabhost,因为除了切换5个页面之外还可以滑动页面,用户体验甚是不错,所以我把网上以前的一个例子改了改,改成ViewPager+Fragment+RadioButtton组合
总共就写了一个类。先看一下代码
public class MainTabActivity extends FragmentActivity implements OnCheckedChangeListener {
RadioGroup main_radio;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.maintabs);
main_radio = (RadioGroup) findViewById(R.id.main_radio);
((RadioButton) findViewById(R.id.radio_button0)).setOnCheckedChangeListener(this);
((RadioButton) findViewById(R.id.radio_button1)).setOnCheckedChangeListener(this);
((RadioButton) findViewById(R.id.radio_button2)).setOnCheckedChangeListener(this);
((RadioButton) findViewById(R.id.radio_button3)).setOnCheckedChangeListener(this);
((RadioButton) findViewById(R.id.radio_button4)).setOnCheckedChangeListener(this);
vPager = (ViewPager) findViewById(R.id.pager);
}
@Override
protected void onStart() {
super.onStart();
Fragment1 f1 = new Fragment1();
Fragment2 f2 = new Fragment2();
Fragment3 f3 = new Fragment3();
Fragment4 f4 = new Fragment4();
Fragment5 f5 = new Fragment5();
fragments.add(f1);
fragments.add(f2);
fragments.add(f3);
fragments.add(f4);
fragments.add(f5);
vPager.setAdapter(new TabPagerAdapter(getSupportFragmentManager(), fragments));
vPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int arg0) {
System.out.println(arg0);
switch (arg0) {
case 0:
((RadioButton) findViewById(R.id.radio_button0)).setChecked(true);
break;
case 1:
((RadioButton) findViewById(R.id.radio_button1)).setChecked(true);
break;
case 2:
((RadioButton) findViewById(R.id.radio_button2)).setChecked(true);
break;
case 3:
((RadioButton) findViewById(R.id.radio_button3)).setChecked(true);
break;
case 4:
((RadioButton) findViewById(R.id.radio_button4)).setChecked(true);
break;
}
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
});
}
ArrayList<Fragment> fragments = new ArrayList<Fragment>();
ViewPager vPager;
/**
* set 页面1~5
*
* @param i
*/
public void setPager(int i) {
vPager.setCurrentItem(i - 1);
}
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
switch (buttonView.getId()) {
case R.id.radio_button0:
setPager(1);
break;
case R.id.radio_button1:
setPager(2);
break;
case R.id.radio_button2:
setPager(3);
break;
case R.id.radio_button3:
setPager(4);
break;
case R.id.radio_button4:
setPager(5);
break;
}
}
}
class TabPagerAdapter extends FragmentPagerAdapter {
ArrayList<Fragment> fragments;
public TabPagerAdapter(FragmentManager fm, ArrayList<Fragment> frags) {
super(fm);
this.fragments = frags;
}
@Override
public Fragment getItem(int pos) {
return fragments.get(pos);
}
@Override
public int getCount() {
return fragments.size();
}
}
/**
* 片段基类
*
* @author Liang
*
*/
public static class BaseFragment extends Fragment {
}
public static class Fragment1 extends BaseFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.main, container, false);
TextView text = (TextView) v.findViewById(R.id.text);
text.setText("1");
return v;
}
}
public static class Fragment2 extends BaseFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.main, container, false);
TextView text = (TextView) v.findViewById(R.id.text);
text.setText("2");
return v;
}
}
public static class Fragment3 extends BaseFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.main, container, false);
TextView text = (TextView) v.findViewById(R.id.text);
text.setText("3");
return v;
}
}
public static class Fragment4 extends BaseFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.main, container, false);
TextView text = (TextView) v.findViewById(R.id.text);
text.setText("4");
return v;
}
}
public static class Fragment5 extends BaseFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.main, container, false);
TextView text = (TextView) v.findViewById(R.id.text);
text.setText("5");
return v;
}
}
}
从这里面能看出来,使用FragmentPagerAdapter 来让Viewpager每个页都用一个Fragment来显示一个界面。这样的话可以达到一个目的,让每一个页面都显示不同的界面,并使用Fragment来控制界面。