教你一步步编写新闻客户端三

       在新闻中用点击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>
  





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值