我在网上查了N多文章, 结果发现,在ANDROID自带的APIDEMO中,居然有Contextual Action Mode的例子, 真是踏破铁鞋无觅处,得来全不费工夫啊!!
这个东东很有意思, 比如在一个ListView中,当长点击某个item时, 在android的header部分会出现一个勾,旁边显示有多少项已被选择。 这个功能比较适合用于数据的batch操作。
1. 先在需要使用该功能的activity或ListFragment里创建一个callback类,执行ListView.MultiChoiceModeListener.我是使用在ListFragment中,如果要在Activity中执行,将getActivity()的方法替换成XXActivity.this即可。
private class ModeCallback implements ListView.MultiChoiceModeListener {
// 设置一个menu,menu显示在header的最右边,在左边,显示这个menu的标题:被选择的项目,然后使用setSubtitle方法显示被选择了多少项。
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
// 在Activity中,比如Activity的名称叫MyActivity
// MenuInflater inflater = MyActivity.this.getMenuInflater();
MenuInflater inflater = getActivity().getMenuInflater();
inflater.inflate(R.menu.list_select_menu, menu);
mode.setTitle("被选择的项目");
setSubtitle(mode);
return true;
}
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return true;
}
// 当点击menu中的菜单项时,运行自定义的操作, 此处只显示一些提示信息。
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
switch (item.getItemId()) {
case R.id.share:
Toast.makeText(getActivity(), "Shared " + getListView().getCheckedItemCount() +
" items", Toast.LENGTH_SHORT).show();
mode.finish();
break;
default:
Toast.makeText(getActivity(), "Clicked " + item.getTitle(),
Toast.LENGTH_SHORT).show();
break;
}
return true;
}
public void onDestroyActionMode(ActionMode mode) {
}
public void onItemCheckedStateChanged(ActionMode mode,
int position, long id, boolean checked) {
setSubtitle(mode);
}
private void setSubtitle(ActionMode mode) {
final int checkedCount = getListView().getCheckedItemCount();
switch (checkedCount) {
case 0:
mode.setSubtitle(null);
break;
case 1:
mode.setSubtitle("选择了1项");
break;
default:
mode.setSubtitle("选择了" + checkedCount + "项");
break;
}
}
}
2. 在Activity中调用这个类, 一般是在create的时候调用
。。。。。。
ListView lv = getListView();
lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
lv.setMultiChoiceModeListener(new ModeCallback());
。。。。。。
3. 备注:menu/list_select_menu.xml
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2010 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/share"
android:title="Share"
android:icon="@android:drawable/ic_menu_share"
android:showAsAction="always" />
</menu>
分享到:
相关推荐
【Python】聊天机器人测试框架_pgj
Python微专业-项目实战_hy4
23种设计模式_hy4
消息中间件源码学习(打注释学习)_hy5
python网络爬虫按月爬cctv新闻30分的视频_hy4
ApacheMINA(MultipurposeInfrastructureforNetworkApplications)_hy4
Python微专业-项目实战_hy5
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
该项目是一款基于微信小程序的东源赛事报名系统设计源码,包含550个文件,涵盖120个JavaScript文件、105个JSON配置文件、104个WXSS样式文件、99个WXML模板文件、80个TypeScript文件、24个PNG图片文件、9个WXS组件文件、5个JPG图片文件、1个Git忽略文件和1个Markdown文件。系统集成了报名、缴费、赛事抽签、晋级等多个功能模块,旨在为用户提供便捷、高效、流畅的赛事报名及后续管理流程体验。
SpringBoot分布式事务_hy4
一个使用和风天气API获取天气信息并通过SMTP发送到邮箱的python小项目[参赛项目]_hy4
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
该优化后的项目描述为:本项目是一款基于Material Design风格的Boat APP Java版启动器美化设计源码,包含4680个文件,涵盖1778个Java类文件、900个PNG图片文件、797个XML布局文件、556个DEX可执行文件、291个JSON配置文件、75个Java源代码文件、68个SO库文件、35个文本文件、34个JAR库文件、23个其他类型文件和文件类型不明的23个文件。此启动器专为Android设备上运行的Minecraft Java版打造,旨在提升用户体验。
该项目是基于kunpeng芯片的prefetch_tuning性能参数调整设计源码,包含21个文件,包括14个Shell脚本、2个Markdown文档、2个C语言源文件、1个许可证文件、1个Makefile文件和1个头文件。主要使用C语言编写,辅以Shell和C语言进行辅助操作。
Datadevelopengine数据研发引擎,用可视化的组件编排后台数据处理逻辑,配合消息触发、定时任务和res_hy5
李宏毅机器学习2020课程的相关代码_hy4
【C#】WebSocket为微信小程序等提供独立的WebSocket服务器端环境
基于Python的百度百科爬虫_hy4
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。