因为之前播放器Android音乐播放器是切换列表需要手动去点击Tittle Tab,感觉不方便,所以今天就做了一点修改,可以通过左右滑动 list 来实现切换,效果如下图:

改造的关键在于FragmentStatePagerAdapter 的使用,详情我们接下来介绍

我们修改的文件都是在MainActivity.java,点击切换版本的源码,请猛戳这里下载

1. onCreate 中添加相关配置

protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);MusicInfos = CursorHandle.getMusicInfos(MainActivity.this);//注册广播接收器registerReceiver();//初始化布局initView();//设置actionbar样式setUpActionBar();//创建ViewPager        setUpViewPager();        setUpTabs();}

2. setUpActionBar对Actionbar进行配置

private void setUpActionBar() {// TODO Auto-generated method stub//配置actionbar样式    final ActionBar actionBar = getActionBar();    actionBar.setHomeButtonEnabled(false);    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);    actionBar.setDisplayShowTitleEnabled(false);    actionBar.setDisplayShowHomeEnabled(false);}


3. 配置ViewPager

private void setUpViewPager() {// TODO Auto-generated method stub//配置 ViewPagermViewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());    mViewPager = (ViewPager)findViewById(R.id.musiclist);    mViewPager.setAdapter(mViewPagerAdapter);    mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {    @Override    public void onPageSelected(int position) {    final ActionBar actionBar = getActionBar();    //选择索引项目    actionBar.setSelectedNavigationItem(position);    }        @Override    public void onPageScrollStateChanged(int state) {    switch(state) {    case ViewPager.SCROLL_STATE_IDLE:    //TODO    break;    case ViewPager.SCROLL_STATE_DRAGGING:    //TODO    break;    case ViewPager.SCROLL_STATE_SETTLING:    //TODO    break;    default:    //TODO    break;    }    }    });}

4.添加ViewPagerAdapt 继承自FragmentStatePagerAdapter

public class ViewPagerAdapter extends FragmentStatePagerAdapter  {public ViewPagerAdapter(FragmentManager fm) {super(fm);// TODO Auto-generated constructor stub}@Overridepublic ListFragment getItem(int position) {// TODO Auto-generated method stub//让tab和 fragment对应switch (position) {case TAB_INDEX_MYSONG:return mysongFragment;case TAB_INDEX_SINGER:return singerFragment;case TAB_INDEX_ALBUM:return albumFragment;}throw new IllegalStateException("No fragment at position " + position);}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn TAB_INDEX_COUNT;}    @Overridepublic CharSequence getPageTitle(int position) {String tabLabel = null;switch (position) {case TAB_INDEX_MYSONG:tabLabel = getString(R.string.mysong);break;case TAB_INDEX_SINGER:tabLabel = getString(R.string.singer);break;case TAB_INDEX_ALBUM:tabLabel = getString(R.string.album);break;}return tabLabel;}    }
主要是进行Tab 和 fragment的匹配,以及 tab tittle的设定

最后 ,我们需要是设置Tab,以及action监听

private void setUpTabs() {// TODO Auto-generated method stubfinal ActionBar actionBar = getActionBar();    for (int i = 0; i < mViewPagerAdapter.getCount(); ++i) {    actionBar.addTab(actionBar.newTab()    .setText(mViewPagerAdapter.getPageTitle(i))    .setTabListener(this));    }}

最后,有兴趣的同学,可以到 这里 下载源码

谢谢





更多相关文章

  1. Android设计模式系列(9)--SDK源码之适配器模式
  2. 安卓开发到底是什么
  3. android 呼吸灯实现源码
  4. 各种android应用模仿源码
  5. 下载频道2013年超人气精华资源汇总---全都是免积分下载
  6. Android(安卓)Studio开发Groovy
  7. Android(安卓)ListView圆角实现
  8. 其实android也可以使用jetty的comet客户端
  9. Android原生(Native)C开发之九:OpenGL ES初探

随机推荐

  1. 【linux】循序渐进学运维-基础篇-文件的
  2. css 实现中文繁体翻译 font-variant-ea
  3. Vue(5): APP.vue引入CSS样式文件和动态切
  4. 【linux-56】文件系统管理-df,du
  5. 用好HugePage,告别Linux性能故障
  6. 一个可能让你的页面渲染速度提升数倍的CS
  7. 一些鲜为人知的的CSS3属性
  8. Linux中常用压缩及解压命令
  9. CSS calc() 函数
  10. 常用的 tailwindcss 模板站点