zoukankan      html  css  js  c++  java
  • 指令汇B新闻客户端开发(二) 主页面布局

    这个主页面采用了一个开源框架SlidingMenu,这个可以在git上面下载。把这些下载下来的文件import我们的eclipse中,用我们的项目去加载这个library,在这个过程中很有可能会报错,说丢失文件,这个时候我们可以尝试一下把support-v4这个包改一下,具体问题可以进一步找度娘解决。对了,主页面也是要求清单文件里面注册的哦!




    我们用fragment来做:初始化fragment, 将fragment数据填充给布局文件

    private void initFragment() {
    		FragmentManager fm = getSupportFragmentManager();
    		FragmentTransaction transaction = fm.beginTransaction();// 开启事务
    
    		transaction.replace(R.id.fl_left_menu, new LeftMenuFragment(),
    				FRAGMENT_LEFT_MENU);// 用fragment替换framelayout
    		transaction.replace(R.id.fl_content, new ContentFragment(),
    				FRAGMENT_CONTENT);
    
    		transaction.commit();// 提交事务
    		// Fragment leftMenuFragment = fm.findFragmentByTag(FRAGMENT_LEFT_MENU);
    	}
    

    我们把整个页面分为contentFragment和leftFragment;



    先来看contentFragment页面的布局文件,它需要5个RadioButton,包含在一个RadioGroup中,还有一个ViewPager

    <RadioGroup
            android:id="@+id/rg_group"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/bottom_tab_bg"
            android:orientation="horizontal" >
    
            <RadioButton
                android:id="@+id/rb_home"
                style="@style/BottomTabStyle"
                android:drawableTop="@drawable/btn_tab_home_selector"
                android:text="首页" />
    
            <RadioButton
                android:id="@+id/rb_news"
                style="@style/BottomTabStyle"
                android:drawableTop="@drawable/btn_tab_news_selector"
                android:text="新闻中心" />
    
            <RadioButton
                android:id="@+id/rb_smart"
                style="@style/BottomTabStyle"
                android:drawableTop="@drawable/btn_tab_smart_selector"
                android:text="智慧服务" />
    
            <RadioButton
                android:id="@+id/rb_gov"
                style="@style/BottomTabStyle"
                android:drawableTop="@drawable/btn_tab_gov_selector"
                android:text="政务" />
    
            <RadioButton
                android:id="@+id/rb_setting"
                style="@style/BottomTabStyle"
                android:drawableTop="@drawable/btn_tab_setting_selector"
                android:text="设置" />

    同时我们还需要添加一个自定义控件:

    <com.zhilinghui.b.View.NoScrollViewPager
            android:id="@+id/vp_content"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1" />


    我们直接来看主页面的代码:

    public class ContentFragment extends BaseFragment {
    
    	@ViewInject(R.id.rg_group)
    	private RadioGroup rgGroup;
    
    	@ViewInject(R.id.vp_content)
    	private ViewPager mViewPager;
    
    	private ArrayList<BasePager> mPagerList;
    
    	@Override
    	public View initViews() {
    		View view = View.inflate(mActivity, R.layout.fragment_content, null);
    		// rgGroup = (RadioGroup) view.findViewById(R.id.rg_group);
    		ViewUtils.inject(this, view); // 注入view和事件
    		return view;
    	}
    
    	@Override
    	public void initData() {
    		rgGroup.check(R.id.rb_home);// 默认勾选首页
    
    		// 初始化5个子页面
    		mPagerList = new ArrayList<BasePager>();
    		// for (int i = 0; i < 5; i++) {
    		// BasePager pager = new BasePager(mActivity);
    		// mPagerList.add(pager);
    		// }
    		mPagerList.add(new HomePager(mActivity));
    		mPagerList.add(new NewsCenterPager(mActivity));
    		mPagerList.add(new SmartServicePager(mActivity));
    		mPagerList.add(new GovAffairsPager(mActivity));
    		mPagerList.add(new SettingPager(mActivity));
    
    		mViewPager.setAdapter(new ContentAdapter());
    
    		// 监听RadioGroup的选择事件
    		rgGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {
    
    			@Override
    			public void onCheckedChanged(RadioGroup group, int checkedId) {
    				switch (checkedId) {
    				case R.id.rb_home:
    					// mViewPager.setCurrentItem(0);// 设置当前页面
    					mViewPager.setCurrentItem(0, false);// 去掉切换页面的动画
    					break;
    				case R.id.rb_news:
    					mViewPager.setCurrentItem(1, false);// 设置当前页面
    					break;
    				case R.id.rb_smart:
    					mViewPager.setCurrentItem(2, false);// 设置当前页面
    					break;
    				case R.id.rb_gov:
    					mViewPager.setCurrentItem(3, false);// 设置当前页面
    					break;
    				case R.id.rb_setting:
    					mViewPager.setCurrentItem(4, false);// 设置当前页面
    					break;
    
    				default:
    					break;
    				}
    			}
    		});
    
    		mViewPager.setOnPageChangeListener(new OnPageChangeListener() {
    
    			@Override
    			public void onPageSelected(int arg0) {
    				mPagerList.get(arg0).initData();// 获取当前被选中的页面, 初始化该页面数据
    			}
    
    			@Override
    			public void onPageScrolled(int arg0, float arg1, int arg2) {
    
    			}
    
    			@Override
    			public void onPageScrollStateChanged(int arg0) {
    
    			}
    		});
    
    		mPagerList.get(0).initData();// 初始化首页数据
    	}
    
    	class ContentAdapter extends PagerAdapter {
    
    		@Override
    		public int getCount() {
    			return mPagerList.size();
    		}
    
    		@Override
    		public boolean isViewFromObject(View arg0, Object arg1) {
    			return arg0 == arg1;
    		}
    
    		@Override
    		public Object instantiateItem(ViewGroup container, int position) {
    			BasePager pager = mPagerList.get(position);
    			container.addView(pager.mRootView);
    			// pager.initData();// 初始化数据.... 不要放在此处初始化数据, 否则会预加载下一个页面
    			return pager.mRootView;
    		}
    
    		@Override
    		public void destroyItem(ViewGroup container, int position, Object object) {
    			container.removeView((View) object);
    		}
    
    	}
    
    
    


    到目前为止,首页的框架算是搭建完成了,还有左侧滑栏没有说。





  • 相关阅读:
    【DFS】XIII Open Championship of Y.Kupala Grodno SU Grodno, Saturday, April 29, 2017 Problem D. Divisibility Game
    【二分】【三分】【计算几何】XIII Open Championship of Y.Kupala Grodno SU Grodno, Saturday, April 29, 2017 Problem L. Lines and Polygon
    【线段树】XIII Open Championship of Y.Kupala Grodno SU Grodno, Saturday, April 29, 2017 Problem J. Jedi Training
    【贪心】【后缀自动机】XIII Open Championship of Y.Kupala Grodno SU Grodno, Saturday, April 29, 2017 Problem E. Enter the Word
    【转载】随机生成k个范围为1-n的随机数,其中有多少个不同的随机数?
    【推导】【贪心】XVII Open Cup named after E.V. Pankratiev Stage 4: Grand Prix of SPb, Sunday, Octorber 9, 2016 Problem H. Path or Coloring
    【枚举】XVII Open Cup named after E.V. Pankratiev Stage 4: Grand Prix of SPb, Sunday, Octorber 9, 2016 Problem D. Cutting Potatoes
    【找规律】【递归】XVII Open Cup named after E.V. Pankratiev Stage 4: Grand Prix of SPb, Sunday, Octorber 9, 2016 Problem F. Doubling
    【贪心】Codeforces Round #436 (Div. 2) D. Make a Permutation!
    【计算几何】【圆反演】计蒜客17314 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 G. Finding the Radius for an Inserted Circle
  • 原文地址:https://www.cnblogs.com/sdksdk0/p/5585127.html
Copyright © 2011-2022 走看看