一.通过activity启动Context Action Bar

1.主java

public class ActivityActionModeFrgmt extends Fragment implements
OnCheckedChangeListener, ActionMode.Callback {
private ActionMode mActionMode;
private CheckBox mCheckBox; @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.frgmt_cab_for_activity, container,
false);
mCheckBox = (CheckBox) v.findViewById(R.id.vid_check_box);
mCheckBox.setOnCheckedChangeListener(this);
return v;
} @Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
mActionMode = getActivity().startActionMode(this);// activity启动一个继承ActionMode,需要ActionMode.Callback
}else
{
mActionMode.finish();
}
} // for ActionMode.Callback
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
MenuInflater inflater = getActivity().getMenuInflater();
inflater.inflate(R.menu.menu_context_for_activity, menu);// 创建context action
// bar的菜单
return true;
} @Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
mode.setTitle("Checked");
return true;
} @Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
switch (item.getItemId()) {
case R.id.action_delete:
Toast.makeText(getActivity(), "delete", Toast.LENGTH_SHORT).show();
break;
case R.id.action_send:
Toast.makeText(getActivity(), "send", Toast.LENGTH_SHORT).show();
break;
case R.id.action_share:
Toast.makeText(getActivity(), "share", Toast.LENGTH_SHORT).show();
break;
case R.id.action_settings:
Toast.makeText(getActivity(), "settings", Toast.LENGTH_SHORT)
.show();
break;
default:
break;
}
mode.finish();
return true;
} @Override
public void onDestroyActionMode(ActionMode mode) {
mCheckBox.setChecked(false);
}
}

2.菜单文件 menu_context_for_activity.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <item
android:id="@+id/action_delete"
android:icon="@android:drawable/ic_menu_delete"
android:showAsAction="ifRoom|withText"
android:title="@string/delete"
android:titleCondensed="delete">
</item>
<item
android:id="@+id/action_share"
android:showAsAction="ifRoom|withText"
android:title="@string/share"/>
<item
android:id="@+id/action_send"
android:showAsAction="ifRoom|withText"
android:title="@string/send"/>
<item
android:id="@+id/action_settings"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/action_settings"/> </menu>

3.布局文件 frgmt_cab_for_activity.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/aty_action_mode" /> <CheckBox
android:id="@+id/vid_check_box"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/view_s_check_mode" /> </LinearLayout>

二. ListView 用Context Action Bar 多选删除示例

1.MultiCabFrgmt.java

public class MultiCabFrgmt extends Fragment implements MultiChoiceModeListener {

    private ListView mListView;
private SelectionArrayAdapter adapter;
private List<ItemData> data; private ShareActionProvider mShareActionProvider; public boolean isItemSelected(int position) {
return false;
} private void init() {
data = new ArrayList<ItemData>();
ItemData ida;
for (int i = 0; i < 32; ++i) {
ida = new ItemData();
ida.txt = "item" + i;
data.add(ida);
}
adapter = new SelectionArrayAdapter(getActivity(),
android.R.layout.simple_list_item_1, data);
mListView.setAdapter(adapter);
mListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);//CHOICE_MODE_SINGLE
mListView.setMultiChoiceModeListener(this);
} @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.frgmt_cab_for_listview, container, false);
mListView = (ListView) v.findViewById(R.id.id_listview);
init();
return v;
} @Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
MenuInflater inflater = getActivity().getMenuInflater();
inflater.inflate(R.menu.menu_context_for_listview, menu);
MenuItem mi = menu.findItem(R.id.action_share);
mShareActionProvider = (ShareActionProvider) mi.getActionProvider();
mShareActionProvider.setShareIntent(new Intent(Intent.ACTION_SEND)
.setType("image/*"));
return true;
} @Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return true;
} @Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
switch (item.getItemId()) {
case R.id.action_delete: {
for (int i = data.size() - 1; i >= 0; --i) {
if (data.get(i).selected) {
data.remove(i);
}
}
}
break;
case R.id.action_share:
break;
case R.id.action_settings:
}
mode.finish();
return true;
} @Override
public void onDestroyActionMode(ActionMode mode) {
for (int i = 0; i < data.size(); i++) {
data.get(i).selected = false;
}
} @Override
public void onItemCheckedStateChanged(ActionMode mode, int position,
long id, boolean checked) {
ItemData ida = data.get(position);
ida.selected = !ida.selected;
adapter.notifyDataSetChanged();
mode.setTitle(mListView.getCheckedItemCount() + " selected");
}
}

2.SelectionArrayAdapter.java

public class SelectionArrayAdapter extends ArrayAdapter<ItemData> {

    private List<ItemData> data;
private LayoutInflater inflater;
private int resource; private void init(Context context,int resource,List<ItemData> data){
this.data = (ArrayList<ItemData>) data;
inflater = LayoutInflater.from(context);
this.resource = resource;
}
public SelectionArrayAdapter(Context context, int resource,
int textViewResourceId, List<ItemData> data) {
super(context, resource, textViewResourceId, data);
init(context,resource,data);
}
public SelectionArrayAdapter(Context context, int resource,
List<ItemData> data) {
super(context, resource, data);
init(context,resource,data);
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
if (null == convertView) {
convertView = inflater.inflate(this.resource, null);
}
TextView tv = (TextView) convertView.findViewById(android.R.id.text1);
ItemData item = getItem(position);
tv.setText(item.txt);
if (item.selected) {
convertView.setBackgroundColor(0x7f0f0f0f);// this is a selected
}else{
convertView.setBackgroundColor(0x7ff0f0f0); // default color
}
return convertView;
} @Override
public ItemData getItem(int position) {
return data.get(position);
} @Override
public long getItemId(int position) {
return position;
} @Override
public void clear() {
super.clear();
} @Override
public int getCount() {
int sz = data.size();
return sz;
}
}

3.Context Action Bar的操作项菜单文件 menu_context_for_listview.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <item
android:id="@+id/action_share"
android:orderInCategory="100"
android:actionProviderClass="android.widget.ShareActionProvider"
android:showAsAction="always"
android:title="@string/share"/>
<item
android:id="@+id/action_delete"
android:showAsAction="ifRoom|withText"
android:title="@string/delete"/>
<item
android:id="@+id/action_settings"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/action_settings"/> </menu>

Contextual Action bar(3) 两个示例的更多相关文章

  1. Contextual Action bar(2) 简介,启动,各函数介绍

    一.Context Action Bar简介 它是一个ActionBar,有各种操作项,但它不是始终显示的ActionBar,它需要上下文才显示.样式如下: 二.Context Action Bar的 ...

  2. Contextual Action bar(1) CAB in Android

    Contextual Action bar (CAB) in Android BY PARESH MAYANI - OCTOBER, 23RD 2013 Before getting into the ...

  3. Action Bar详解

    Action bar是一个标识应用程序和用户位置的窗口功能,并且给用户提供操作和导航模式.在大多数的情况下,当你需要突出展现用户行为或全局导航的activity中使用action bar,因为acti ...

  4. Android UI开发第二十四篇——Action Bar

    Action bar是一个标识应用程序和用户位置的窗口功能,并且给用户提供操作和导航模式.在大多数的情况下,当你需要突出展现用户行为或全局导航的activity中使用action bar,因为acti ...

  5. 【转】Android UI开发第二十四篇——Action Bar

    Action bar是一个标识应用程序和用户位置的窗口功能,并且给用户提供操作和导航模式.在大多数的情况下,当你需要突出展现用户行为或全局导航的activity中使用action bar,因为acti ...

  6. Android Contextual Menus之二:contextual action mode

    Android Contextual Menus之二:contextual action mode 接上文:Android Contextual Menus之一:floating context me ...

  7. Android设计和开发系列第二篇:Action Bar(Develop—API Guides)

    Action Bar IN THIS DOCUMENT Adding the Action Bar Removing the action bar Using a logo instead of an ...

  8. Android设计和开发系列第二篇:Action Bar(Design)

    Action Bar The action bar is a dedicated piece of real estate at the top of each screen that is gene ...

  9. Android系统UI交互控件Action Bar初探

    过年期间,Google正式宣布取消Android系统中MENU键的使用,也就是基于Android 4.0系统的手机都应没有MENU这一固定按键.这无疑是个变革性的改动,在我眼中,这似乎把Android ...

随机推荐

  1. HDU 6119 小小粉丝度度熊 【预处理+尺取法】(2017"百度之星"程序设计大赛 - 初赛(B))

    小小粉丝度度熊 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  2. react native 中的redux 理解

    redux 中主要分为三大块,分别是Action Reducer 与Store. 1.Action是js的一个普通对象,是store数据的唯一来源.通过store.dispath()讲action传到 ...

  3. react native 之页面布局

     第一章 flexbox 布局 1.flexDirection:'row', 水平 flexDirection:'column',垂直 需要在父元素上设置这种属性才能实现flex. flex:1 会撑 ...

  4. HDU1693 Eat the Trees —— 插头DP

    题目链接:https://vjudge.net/problem/HDU-1693 Eat the Trees Time Limit: 4000/2000 MS (Java/Others)    Mem ...

  5. java邮件发送(含附件)

    1. [代码]java邮件发送(含附件)疯狂的IT人站长整理的:利用Java发送邮件(含附件)的例子:1.邮件发送的配置propertity文件内容如下:(utils.properties文件放在sr ...

  6. BZOJ_3063_[Usaco2013]Route Designing_DP

    BZOJ_3063_[Usaco2013]Route Designing_DP Description After escaping from the farm, Bessie has decided ...

  7. nginx开发_配置项

    nginx开发笔记_配置项 模块的配置项即nginx.conf中的指令,HTTP模块指令可以分为三个级别: main级,直接写在http{}块中的指令 server级,写在server{}块中的指令 ...

  8. 「LuoguP3384」【模板】树链剖分

    题目描述 如题,已知一棵包含N个结点的树(连通且无环),每个节点上包含一个数值,需要支持以下操作: 操作1: 格式: 1 x y z 表示将树从x到y结点最短路径上所有节点的值都加上z 操作2: 格式 ...

  9. [Codeforces 914D] Bash and a Tough Math Puzzle

    [题目链接] https://codeforces.com/contest/914/problem/D [算法] 显然 , 当一个区间[l , r]中为d倍数的数的个数 <= 1 , 答案为Ye ...

  10. 1004 n^n的末位数字

    题目来源: Author Ignatius.L (Hdu 1061) 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题   给出一个整数N,输出N^N(N的N次方)的十 ...