转载请注明出处: 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 - 数据准备以及加载流程