因为之前播放器 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);
}
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));
}
}
最后,有兴趣的同学,可以到 这里 下载源码
谢谢