在新闻中用点击tab来切换界面效果图的方式比较常见,在此我们不打算用TabActivity和FragmentActivity,我们采用ViewPage的方法,因为Activity是安卓的四大组件之一,是一个重量级的控件,如果用Activity占用的资源比较多,不是很好的选择。而ViewPage是一个轻量级的类,它的setCurrent()方法可以很好的解决切换问题。
因为在ViewPage容器中显示的视图都需要填充View,即需要初始化View,所以我们然他们都继承BasePage类,在类中定义两个抽象方法,initView(LayoutInflater inflater)和initData()。
<span style="font-size:18px;">public abstract class BasePage {
private View view;
public Context ct;
public BasePage(Context ct) {
this.ct = ct;
LayoutInflater inflater = (LayoutInflater) ct
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = initView(inflater);
}
//该方法将view暴露出去
public View getRootView() {
return view;
}
public abstract View initView(LayoutInflater inflater);
public abstract void initData();
}</span>
其他5个类继承BasePage
public class FunctionPage extends BasePage {
public FunctionPage(Context ct) {
super(ct);
// TODO Auto-generated constructor stub
}
@Override
public View initView(LayoutInflater inflater) {
// TODO Auto-generated method stub
TextView text = new TextView(ct);
text.setText("Function");
return text;
}
@Override
public void initData() {
// TODO Auto-generated method stub
}
}
使用PageAdapter适配器,将视图添加到容器中
class HomePageAdapter extends PagerAdapter {
private Context ct;
private List<BasePage> list;
public HomePageAdapter(Context ct, List<BasePage> list) {
this.ct = ct;
this.list = list;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
// TODO Auto-generated method stub
return view == object;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
((LazyViewPager) container).removeView(list.get(position)
.getRootView());
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
// TODO Auto-generated method stub
((LazyViewPager) container).addView(list.get(position)
.getRootView(), 0);
return list.get(position).getRootView();
}
}
然后点击,按钮切换视图。
<span style="font-size:18px;">Override
public void initData(Bundle savedInstanceState) {
// TODO Auto-generated method stub
list.add(new FunctionPage(ct));
list.add(new NewsCenterPage(ct));
list.add(new SmartServicePage(ct));
list.add(new GovAffairsPage(ct));
list.add(new SettingPage(ct));
HomePageAdapter homePageAdapter = new HomePageAdapter(ct, list);
page.setAdapter(homePageAdapter);
main_radion.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
// TODO Auto-generated method stub
switch (checkedId) {
case R.id.rb_function:
page.setCurrentItem(0, false);
checkedId = 0;
break;
case R.id.rb_news_center:
page.setCurrentItem(1, false);
checkedId = 1;
break;
case R.id.rb_smart_service:
page.setCurrentItem(2, false);
checkedId = 2;
break;
case R.id.rb_gov_affairs:
page.setCurrentItem(3, false);
checkedId = 3;
break;
case R.id.rb_setting:
page.setCurrentItem(4, false);
checkedId = 4;
break;
default:
break;
}
}
});</span>