android action bar 多选操作 兼容2.X的方法
2014-04-11 00:37
197 查看
大概有2种方式,1是用setMultiChocie方法,但是遗憾的是2.X版本不支持,最低版本要求是api11.
无奈用第2种方式:mActionMode,虽然稍微麻烦点儿。
下面就主要介绍mActionMode形式的用法。
首先,长按时启动actionMode
其次,自定义ActionMode.Callback类,并在创建的回调里加载contextual menu
关键步骤就是上面的这几步。
还有几点注意:
注册监听时要绑定适配器。
mActionMode = startSupportActionMode(new MyActionModeCallback());
start的时候是有返回值的,要给mActionMode值,我就是因为忘了,所以导致长按后的子项点击事件没有log而纠结半天。
先写这么多,后续的多选完成后的删除操作明天加上。
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL); listView.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() { @Override public void onItemCheckedStateChanged(android.view.ActionMode mode, int position, long id, boolean checked) { } @Override public boolean onCreateActionMode(android.view.ActionMode mode, Menu menu) { return false; } @Override public boolean onPrepareActionMode(android.view.ActionMode mode, Menu menu) { return false; } @Override public boolean onActionItemClicked(android.view.ActionMode mode, MenuItem item) { return false; } @Override public void onDestroyActionMode(android.view.ActionMode mode) { } });
无奈用第2种方式:mActionMode,虽然稍微麻烦点儿。
下面就主要介绍mActionMode形式的用法。
首先,长按时启动actionMode
listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { if (mActionMode == null) { mActionMode = startSupportActionMode(new MyActionModeCallback()); } return true; } });
其次,自定义ActionMode.Callback类,并在创建的回调里加载contextual menu
private class MyActionModeCallback implements ActionMode.Callback { @Override public boolean onCreateActionMode(ActionMode actionMode, Menu menu) { actionMode.getMenuInflater().inflate(R.menu.context_menu, menu); return true; } @Override public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) { return false; } @Override public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) { return false; } @Override public void onDestroyActionMode(ActionMode actionMode) {
list.get(position).setSelected(false); adapter.notifyDataSetChanged();mActionMode = null;
} }然后,写listView的子项点击事件
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if (mActionMode != null) { LogCat.v(TAG + "position:" + position); list.get(position).setSelected(!list.get(position).isSelected()); adapter.notifyDataSetChanged(); } } });然后,在适配器 getView方法里根据bool设置背景颜色。
if (list.get(position).isSelected()) { view.setBackgroundColor(context.getResources().getColor(R.color.blue_light)); } else { view.setBackgroundColor(Color.TRANSPARENT); }
关键步骤就是上面的这几步。
还有几点注意:
注册监听时要绑定适配器。
mActionMode = startSupportActionMode(new MyActionModeCallback());
start的时候是有返回值的,要给mActionMode值,我就是因为忘了,所以导致长按后的子项点击事件没有log而纠结半天。
先写这么多,后续的多选完成后的删除操作明天加上。
相关文章推荐
- Android事务操作(操作sqlite导入大量数据耗时的解决方法)
- Android中OnkeyDown事件和OnBackPressed方法区别、兼容、使用
- Android中操作App的一些常用方法
- Android开发,实现可多选的图片ListView,便于批量操作
- Android 四种异步操作UI界面的方法
- Android 反射调用方法并利用此方法展开android通知栏(兼容4.2及以上)
- Android编程操作手机通讯录的方法示例
- Android中SQLite数据库操作(2)——使用SQLiteDatabase提供的方法操作数据库
- Android中Calendar与Date的区别以及消除时区对日期操作影响的方法
- Android实现便于批量操作可多选的图片ListView实例
- Android使用ShowcaseView加入半透明操作提示图片的方法
- [Android L]SEAndroid开放设备文件结点权限(读或写)方法(涵盖常用操作:sys/xxx、proc/xxx、SystemProperties)热门干货
- android打开应用所在的市场页面进行评分操作的方法
- Android做半透明操作提示图片的方法
- js 调用本地方法时兼容Android和Ios
- iOS/Android/WAP 全兼容专题页面制作方法(一)
- android上的微信链接不能下载,拨打电话等在浏览器中常见操作的解决方法
- Android 四种异步操作UI界面的方法
- Android中Calendar与Date的区别以及消除时区对日期操作影响的方法
- js中对arry数组的各种操作小结 瀑布流AJAX无刷新加载数据列表--当页面滚动到Id时再继续加载数据 web前端url传递值 js加密解密 HTML中让表单input等文本框为只读不可编辑的方法 js监听用户的键盘敲击事件,兼容各大主流浏览器 HTML特殊字符