因为之前播放器 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(); }
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); }
private void setUpViewPager() { // TODO Auto-generated method stub //配置 ViewPager mViewPagerAdapter = 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 } @Override public 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); } @Override public int getCount() { // TODO Auto-generated method stub return TAB_INDEX_COUNT; } @Override public 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 stub final ActionBar actionBar = getActionBar(); for (int i = 0; i < mViewPagerAdapter.getCount(); ++i) { actionBar.addTab(actionBar.newTab() .setText(mViewPagerAdapter.getPageTitle(i)) .setTabListener(this)); } }
谢谢