因為之前播放器 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
//配置 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));
}
}
最後,有興趣的同學,可以到 這裡 下載下傳源碼
謝謝