轉載請註明出處: http://blog.csdn.net/lb377463323/article/details/70308541
ActionBar實現下拉導航
Gallery中使用下拉導航顯示可分類的標籤,默認分爲相冊、地點、時間、人物和標籤等,實現此下拉導航只需要實現如下代碼:
//AbstractGalleryActivity類
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
//這裏是對每個頁面創建菜單欄
return getStateManager().createOptionsMenu(menu);
}
//StateManager類
public boolean createOptionsMenu(Menu menu) {
......
return getTopState().onCreateActionBar(menu);
}
//AlbumSetPage類
protected boolean onCreateActionBar(Menu menu) {
//這裏就是顯示分類菜單的下拉導航,mActionBar即爲GalleryActionBar
mActionBar.enableClusterMenu(mSelectedAction, this);
}
//這個方法就是下拉導航的具體實現
public void enableClusterMenu(int action, ClusterRunner runner) {
mActionBar.setListNavigationCallbacks(SpinnerAdapter adapter,
OnNavigationListener callback);
mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
//選中指定位置的導航項,也就是默認顯示哪一個導航項
setSelectedAction(action);
mClusterRunner = runner;
}
adapter在Gallery用的是ClusterAdapter,也就是控制下拉導航顯示的內容,自己看下代碼很容易理解。對於Adapter的話,寫過ListView的一個很熟悉,這裏不多講了。
OnNavigationListener是一個接口,需要實現onNavigationItemSelected方法,這個方法用來處理下拉導航的點擊事件。下面開始細講這個方法。
根據標籤進行分類
Gallery點擊下拉導航一共有相冊、地點、時間、任務和標籤,下面就只分析根據任務進行分類。
在onNavigationItemSelected方法中通過doCluster進行分類
mClusterRunner.doCluster(sClusterItems[itemPosition].action);
AlbumSetPage實現了ClusterRunner接口,所以mClusterRunner實際上就是AlbumSetPage。下面看下doCluster方法,這是執行分類的實現。
data.putString(AlbumSetPage.KEY_MEDIA_PATH, newPath);
data.putInt(KEY_SELECTED_CLUSTER_TYPE, clusterType);
//通過StateManager切換頁面
mActivity.getStateManager().switchState(this, AlbumSetPage.class, data);
切換頁面是從AlbumSetPage切換到AlbumSetPage,只不過裏面的數據變了而已。data封裝了兩條數據,AlbumSetPage.KEY_MEDIA_PATH是”/cluster/{/combo/{/local/all,picasa/all}}/face”,KEY_SELECTED_CLUSTER_TYPE是32
之後的過程跟分析3一樣,只不過路徑和數據源變一下。http://blog.csdn.net/lb377463323/article/details/69569133“>Android 7.0 Gallery源碼分析3 - 數據準備以及加載流程