ViewPage+Fragment实现区域顶部tab滑动切换.docx

上传人:小飞机 文档编号:3168427 上传时间:2023-03-11 格式:DOCX 页数:10 大小:39.35KB
返回 下载 相关 举报
ViewPage+Fragment实现区域顶部tab滑动切换.docx_第1页
第1页 / 共10页
ViewPage+Fragment实现区域顶部tab滑动切换.docx_第2页
第2页 / 共10页
ViewPage+Fragment实现区域顶部tab滑动切换.docx_第3页
第3页 / 共10页
ViewPage+Fragment实现区域顶部tab滑动切换.docx_第4页
第4页 / 共10页
ViewPage+Fragment实现区域顶部tab滑动切换.docx_第5页
第5页 / 共10页
亲,该文档总共10页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《ViewPage+Fragment实现区域顶部tab滑动切换.docx》由会员分享,可在线阅读,更多相关《ViewPage+Fragment实现区域顶部tab滑动切换.docx(10页珍藏版)》请在三一办公上搜索。

1、ViewPage+Fragment实现区域顶部tab滑动切换 烟台杰瑞教育科技有限公司(Android开发培训部) 版权所有 ViewPage+Fragment实现区域顶部tab滑动切换 一、问题描述 本系列将结合案例应用,陆续向大家介绍一些Android典型界面的设计,首先说说tab导航,导航分为一层和两层,主要实现方案有RadioGroup+ViewPage+Fragment、Viewpager Indicator、ActionBar Tabs、FragmentTabHost+Fragment等,下面我们先采用RadioGroup+ViewPage+Fragment实现区域头部导航。 如图

2、所示: -杰瑞教育( ) 专注IT技能培训 打造一流人才服务平台- 烟台杰瑞教育科技有限公司(Android开发培训部) 版权所有 二、案例主要组件 1、先看一下MainActivity布局 2、MainActivity代码: public class MainActivity extends FragmentActivity implements OnPageChangeListener private ViewPager viewPager; private RadioGroup rgChannel=null; private HorizontalScrollView hvChannel;

3、 private PageFragmentAdapter adapter=null; private List fragmentList=new ArrayList; Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); -杰瑞教育( ) 专注IT技能培训 打造一流人才服务平台- 烟台杰瑞教育科技有限公司(Android开发培训部) 版权所有 initView; private

4、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 public void onCh

5、eckedChanged(RadioGroup group, int checkedId) viewPager.setCurrentItem(checkedId); ); viewPager.setOnPageChangeListener(this); initTab;/动态产生RadioButton initViewPager; rgChannel.check(0); private void initTab List channelList=ChannelDb.getSelectedChannel; for(int i=0;ichannelList.size;i+) RadioButton

6、 rb=(RadioButton)LayoutInflater.from(this). inflate(R.layout.tab_rb, null); rb.setId(i); rb.setText(channelList.get(i).getName); RadioGroup.LayoutParams params=new RadioGroup.LayoutParams(RadioGroup.LayoutParams.WRAP_CONTENT, RadioGroup.LayoutParams.WRAP_CONTENT); rgChannel.addView(rb,params); priva

7、te void initViewPager List channelList=ChannelDb.getSelectedChannel; for(int i=0;ichannelList.size;i+) NewsFragment frag=new NewsFragment; Bundle bundle=new Bundle; bundle.putString(weburl, channelList.get(i).getWeburl); bundle.putString(name, channelList.get(i).getName); frag.setArguments(bundle);

8、/向Fragment传入数据 fragmentList.add(frag); -杰瑞教育( ) 专注IT技能培训 打造一流人才服务平台- 烟台杰瑞教育科技有限公司(Android开发培训部) 版权所有 adapter=new PageFragmentAdapter(super.getSupportFragmentManager,fragmentList); viewPager.setAdapter(adapter); /viewPager.setOffscreenPageLimit(0); /* * 滑动ViewPager时调整ScroollView的位置以便显示按钮 * param idx

9、*/ private void setTab(int idx) RadioButton rb=(RadioButton)rgChannel.getChildAt(idx); rb.setChecked(true); int left=rb.getLeft; int width=rb.getMeasuredWidth; DisplayMetrics metrics=new DisplayMetrics; super.getWindowManager.getDefaultDisplay.getMetrics(metrics); int screenWidth=metrics.widthPixels

10、; int len=left+width/2-screenWidth/2; hvChannel.smoothScrollTo(len, 0);/滑动ScroollView Override public void onPageScrollStateChanged(int arg0) Override public void onPageScrolled(int arg0, float arg1, int arg2) Override public void onPageSelected(int position) / TODO Auto-generated method stub setTab

11、(position); 其中initTab方法实现向RadioGroup动态添加RadioButton 导航按钮数据来源于ChannelDb private static List selectedChannel=new ArrayList; static selectedChannel.add(new Channel(,头条,0,); -杰瑞教育( ) 专注IT技能培训 打造一流人才服务平台- 烟台杰瑞教育科技有限公司(Android开发培训部) 版权所有 selectedChannel.add(new Channel(,娱乐,0,); selectedChannel.add(new Cha

12、nnel(,体育,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,); selectedChannel.add(new Channel(,时尚,0,); public static List getSelectedChannel re

13、turn selectedChannel; 导航按钮外观:tab_rb.xml和tab_selector.xml背景选择器 tab_selector.xml: -杰瑞教育( ) 专注IT技能培训 打造一流人才服务平台- 烟台杰瑞教育科技有限公司(Android开发培训部) 版权所有 3、PageFragmentAdapter适配器 public class PageFragmentAdapter extends FragmentPagerAdapter private List fragmentList; private FragmentManager fm; public PageFragm

14、entAdapter(FragmentManager fm,List fragmentList) super(fm); this.fragmentList=fragmentList; this.fm=fm; Override public Fragment getItem(int idx) return fragmentList.get(idx%fragmentList.size); Override public int getCount return fragmentList.size; Override public int getItemPosition(Object object)

15、return POSITION_NONE; /没有找到child要求重新加载 4、NewsFragment组件: public class NewsFragment extends Fragment private String weburl; private String channelName; Override public void onAttach(Activity activity) super.onAttach(activity); private View view; Override public View onCreateView(LayoutInflater inflat

16、er, ViewGroup container, -杰瑞教育( ) 专注IT技能培训 打造一流人才服务平台- 烟台杰瑞教育科技有限公司(Android开发培训部) 版权所有 Bundle savedInstanceState) if(view=null)/优化View减少View的创建次数 /该部分可通过xml文件设计Fragment界面,再通过LayoutInflater转换为View组件 /这里通过代码为fragment添加一个TextView TextView tvTitle=new TextView(getActivity); tvTitle.setText(channelName);

17、 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; Override public void setArguments(Bundle bundle) /接收传入的数据 weburl=bundle.getString(weburl); channelName=bundle.getString(name); -杰瑞教育( ) 专注IT技能培训 打造一流人才服务平台-

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号