Gallery3d 学习笔记(17)
来源:互联网 发布:mac中文官网 编辑:程序博客网 时间:2024/05/19 13:15
上次我们说到ActionBar的适配器
mActionBar.setListNavigationCallbacks(mAdapter, this);
使用上述代码关联,而mAdapter的适配器是单独的一个私有类的实例
private ClusterAdapter mAdapter = new ClusterAdapter();
private class ClusterAdapter extends BaseAdapter { @Override public int getCount() { return sClusterItems.length; } @Override public Object getItem(int position) { return sClusterItems[position]; } @Override public long getItemId(int position) { return sClusterItems[position].action; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = mInflater.inflate(R.layout.action_bar_text, parent, false); } TextView view = (TextView) convertView; view.setText(sClusterItems[position].spinnerTitle); return convertView; } }
类中主要使用5个菜单项目来组织。
而只有getView的时候,使用的是action_bar_text的layout.
那么这个GalleryActionBar,并没有直接继承,而是将ActionBar做一个成员变量放入类中,自己仅仅实现一个接口 OnNavigationListerer
public class GalleryActionBar implements OnNavigationListener { @SuppressWarnings("unused") private static final String TAG = "GalleryActionBar"; private ClusterRunner mClusterRunner; --用来回调接口doCluster的成员变量 private CharSequence[] mTitles; private ArrayList<Integer> mActions; private Context mContext; private LayoutInflater mInflater; private AbstractGalleryActivity mActivity; private ActionBar mActionBar; ---实际的上层基础实现 private int mCurrentIndex; private ClusterAdapter mAdapter = new ClusterAdapter(); --相册集使用的适配器(时间 地点 人物 标签) private AlbumModeAdapter mAlbumModeAdapter; -- 相册使用的适配器(幻灯片视图 网格视图) private OnAlbumModeSelectedListener mAlbumModeListener; private int mLastAlbumModeSelected; private CharSequence [] mAlbumModes; public static final int ALBUM_FILMSTRIP_MODE_SELECTED = 0; public static final int ALBUM_GRID_MODE_SELECTED = 1; public interface ClusterRunner { --后面Page要实现的接口 public void doCluster(int id); } public interface OnAlbumModeSelectedListener { --后面Page要实现的接口 public void onAlbumModeSelected(int mode); }
相册集页面的调用
@Override public void doCluster(int clusterType) { String basePath = mMediaSet.getPath().toString(); String newPath = FilterUtils.switchClusterPath(basePath, clusterType); Bundle data = new Bundle(getData()); data.putString(AlbumSetPage.KEY_MEDIA_PATH, newPath); data.putInt(KEY_SELECTED_CLUSTER_TYPE, clusterType); mActivity.getStateManager().switchState(this, AlbumSetPage.class, data); }
相册页面的调用
@Override public void doCluster(int clusterType) { String basePath = mMediaSet.getPath().toString(); String newPath = FilterUtils.newClusterPath(basePath, clusterType); Bundle data = new Bundle(getData()); data.putString(AlbumSetPage.KEY_MEDIA_PATH, newPath); if (mShowClusterMenu) { Context context = mActivity.getAndroidContext(); data.putString(AlbumSetPage.KEY_SET_TITLE, mMediaSet.getName()); data.putString(AlbumSetPage.KEY_SET_SUBTITLE, GalleryActionBar.getClusterByTypeString(context, clusterType)); } // mAlbumView.savePositions(PositionRepository.getInstance(mActivity)); mActivity.getStateManager().startStateForResult( AlbumSetPage.class, REQUEST_DO_ANIMATION, data); }
而客户点击的是ActionBar的菜单,必须要实现菜单点击的事件,经常使用ActionBar的同志们应该都是熟悉的onNavigationItemSelected,
@Override public boolean onNavigationItemSelected(int itemPosition, long itemId) { if (itemPosition != mCurrentIndex && mClusterRunner != null || mAlbumModeListener != null) { // Need to lock rendering when operations invoked by system UI (main thread) are // modifying slot data used in GL thread for rendering. mActivity.getGLRoot().lockRenderThread(); try { if (mAlbumModeListener != null) { mAlbumModeListener.onAlbumModeSelected(itemPosition); --相册的时候不同菜单的实现 } else { mClusterRunner.doCluster(sClusterItems[itemPosition].action); ---相册集的时候不同菜单的实现 } } finally { mActivity.getGLRoot().unlockRenderThread(); } } return false; }
为什么是这个呢,因为我们实现了这个系统接口,而系统在实现ActionBar的时候会回调回来
GalleryActionBar implements OnNavigationListener
那么ActionBar左边的东西在两种状态下的实现我们都清楚了,下次讲讲右边的内容如何实现的。
0 0
- Gallery3d 学习笔记(17)
- Gallery3d 学习笔记(17)
- Gallery3d 学习笔记(16)
- Gallery3d 学习笔记(18)
- Gallery3d 学习笔记(19)
- Gallery3d 学习笔记
- Gallery3D
- Gallery3D源码阅读笔记(一) RenderView.java
- android用户界面之Gallery3D学习资料汇总
- gallery3D(1)
- gallery3D(2)
- gallery3D(3)
- gallery3d(4)
- Gallery3D简介
- Gallery3D源码分析
- Android控件Gallery3D效果
- Android控件Gallery3D效果
- Android Gallery3D源码分析
- 好记性不如烂笔头36-利用java过滤器禁止浏览器缓存
- error:Createprocess接收命令行的参数时,无法找到指定的文件。。
- Android RSA加密解密
- EdmondsKarp模板,hdu1532
- Android 使用ContentProvider扫描手机中的图片,仿微信显示本地图片效果
- Gallery3d 学习笔记(17)
- 深入tomcat验证机制
- UML笔记10--包和UML语言基础
- Sqlserver 导出insert插入语句
- 理解进程与多线程的概念及关系
- Fragment笔记整理
- Android调用netty客户端出现编码问题
- Hibernate学习:主键生成策略
- Boost编译安装记录