1、 烟台杰瑞教育科技有限公司( Android 开发培训部) 版权所有-杰瑞教育( ) 专注 IT 技能培训 打造一流人才服务平台-ViewPage+Fragment 实现区域顶部 tab滑动切换一、问题描述本系列将结合案例应用,陆续向大家介绍一些 Android 典型界面的设计,首先说说tab 导航,导航分为一层和两层(底部区块+ 区域内头部导航),主要实现方案有RadioGroup+ViewPage+Fragment、Viewpager Indicator、ActionBar Tabs、FragmentTabHost+Fragment 等,下面我们先采用RadioGroup+ViewPage
2、+Fragment 实现区域头部导航。如图所示:烟台杰瑞教育科技有限公司( Android 开发培训部) 版权所有-杰瑞教育( ) 专注 IT 技能培训 打造一流人才服务平台-二、案例主要组件1、先看一下 MainActivity 布局2、MainActivity 代码:public class MainActivity extends FragmentActivity implements OnPageChangeListenerprivate ViewPager viewPager;private RadioGroup rgChannel=null;private HorizontalSc
3、rollView hvChannel;private PageFragmentAdapter adapter=null;private List fragmentList=new ArrayList();Overrideprotected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();烟台杰瑞教育科技有限公司( Android 开发培训部) 版权所有-杰瑞教育( ) 专注 IT 技能培训 打
4、造一流人才服务平台-private void initView()rgChannel=(RadioGroup)super.findViewById(R.id.rgChannel);viewPager=(ViewPager)super.findViewById(R.id.vpNewsList);hvChannel=(HorizontalScrollView)super.findViewById(R.id.hvChannel);rgChannel.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() Override
5、public void onCheckedChanged(RadioGroup group, int checkedId) viewPager.setCurrentItem(checkedId); );viewPager.setOnPageChangeListener(this);initTab();/动态产生 RadioButtoninitViewPager();rgChannel.check(0);private void initTab()List channelList=ChannelDb.getSelectedChannel();for(int i=0;i channelList=C
6、hannelDb.getSelectedChannel();for(int i=0;i selectedChannel=new ArrayList();staticselectedChannel.add(new Channel(“,“头条“,0,“,“);selectedChannel.add(new Channel(“,“娱乐“,0,“,“);selectedChannel.add(new Channel(“,“体育“,0,“,“);烟台杰瑞教育科技有限公司( Android 开发培训部) 版权所有-杰瑞教育( ) 专注 IT 技能培训 打造一流人才服务平台-selectedChannel.
7、add(new Channel(“,“财经“,0,“,“);selectedChannel.add(new Channel(“,“热点“,0,“,“);selectedChannel.add(new Channel(“,“科技“,0,“,“);selectedChannel.add(new Channel(“,“图片“,0,“,“);selectedChannel.add(new Channel(“,“汽车“,0,“,“);selectedChannel.add(new Channel(“,“时尚“,0,“,“);public static List getSelectedChannel()r
8、eturn selectedChannel;导航按钮外观:tab_rb.xml 和 tab_selector.xml 背景选择器(实现选择后带红色下划线效果)tab_selector.xml:烟台杰瑞教育科技有限公司( Android 开发培训部) 版权所有-杰瑞教育( ) 专注 IT 技能培训 打造一流人才服务平台-3、PageFragmentAdapter 适配器public class PageFragmentAdapter extends FragmentPagerAdapterprivate List fragmentList;private FragmentManager fm;p
9、ublic PageFragmentAdapter(FragmentManager fm,List fragmentList)super(fm);this.fragmentList=fragmentList;this.fm=fm;Overridepublic Fragment getItem(int idx) return fragmentList.get(idx%fragmentList.size();Overridepublic int getCount() return fragmentList.size();Override public int getItemPosition(Obj
10、ect object) return POSITION_NONE; /没有找到 child要求重新加载 4、NewsFragment 组件:public class NewsFragment extends Fragment private String weburl;private String channelName;Overridepublic void onAttach(Activity activity) super.onAttach(activity);private View view;Overridepublic View onCreateView(LayoutInflater
11、 inflater, ViewGroup container,Bundle savedInstanceState) if(view=null)/优化 View减少 View的创建次数 烟台杰瑞教育科技有限公司( Android 开发培训部) 版权所有-杰瑞教育( ) 专注 IT 技能培训 打造一流人才服务平台-/该部分可通过 xml文件设计 Fragment界面,再通过 LayoutInflater转换为View组件/这里通过代码为 fragment添加一个 TextViewTextView tvTitle=new TextView(getActivity();tvTitle.setText(
12、channelName);tvTitle.setTextSize(16);tvTitle.setGravity(Gravity.CENTER);tvTitle.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT);view=tvTitle;ViewGroup parent=(ViewGroup)view.getParent();if(parent!=null)/如果 View已经添加到容器中,要进行删除,负责会报错parent.removeView(view);return view;Overridepublic void setArguments(Bundle bundle) /接收传入的数据weburl=bundle.getString(“weburl“);channelName=bundle.getString(“name“);