上下文菜单和Contextual Action Mode(学习Android Programming The Big Nerd Ranch Guide)_移动开发_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > 移动开发 > 上下文菜单和Contextual Action Mode(学习Android Programming The Big Nerd Ranch Guide)

上下文菜单和Contextual Action Mode(学习Android Programming The Big Nerd Ranch Guide)

 2014/9/11 10:01:39  Goodyang  程序员俱乐部  我要评论(0)
  • 摘要:在AndroidProgrammingTheBigNerdRanchGuide书中,讲解上下文菜单的实现,添加一个删除菜单。在Honeycomb发布前的设备里,上下文的action都是以悬浮的上下文菜单形式呈现。在之后的设备里,推荐用上下文的actionbar的方式去呈现上下文的action。上下文的actionbar展现在一个activity的顶部。运行在Honeycomb之前版本的程序,有些也会出现上下文actionbar。那是因为它使用了第三方库
  • 标签:android 学习 学习Android ide 菜单

在Android Programming The Big Nerd Ranch Guide书中,讲解上下文菜单的实现,添加一个删除菜单。

在Honeycomb发布前的设备里,上下文的action都是以悬浮的上下文菜单形式呈现。在之后的设备里,推荐用上下文的action bar的方式去呈现上下文的action。上下文的action bar展现在一个activity的顶部。

运行在Honeycomb之前版本的程序,有些也会出现上下文action bar。那是因为它使用了第三方库,这个库名字是ActionBarSherlock。

一、实现悬浮的上下文菜单

     1、用XML定义”删除菜单”资源文件。

     2、实现onCreateContextMenu(………)方法,用它来inflate菜单资源文件。

@Override
public void onCreateContextMenu(ContextMenu menu, View v,
        ContextMenuInfo menuInfo) {
    getActivity().getMenuInflater().inflate(R.menu.crime_list_item_context, menu);
}

    3、要在onCreateView中注册这个context menu。

ListView listView = (ListView)view.findViewById(android.R.id.list);
registerForContextMenu(listView);

              4、最后在实现onContextItemSelected(MenuItem item)方法,来处理删除菜单被点击的事件。

二、兼容上下文action bar菜单

   1、修改onCreateView中对于context menu的注册。

ListView listView = (ListView)view.findViewById(android.R.id.list);
if(Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB){
    registerForContextMenu(listView);
}else{
    listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
}

  ListView.CHOICE_MODE_MULTIPLE_MODAL是listview多选模式。

  在悬浮的上下文菜单中,一次只能选择一个item,activity会在选择后被覆盖进入Paused状态,很不方便。

  而在这种contextual action bar 菜单模式下,可以一次选多个item。

  2、为listview设置一个监听器。需要实现AbsListView.MultiChoiceModeListener接口

      这个接口中包含一个方法:

public void onItemCheckedStateChanged(ActionMode mode, int position,   long id, boolean checked)

               它会在item被选中和取消选中后响应。

             

               MultiChoiceModeListener还实现了另一个接口ActionMode.Callback,它包含四个方法,分别在ActionMode生命周期的不同阶段回调。

public boolean onCreateActionMode(ActionMode mode, Menu menu)

public boolean onPrepareActionMode(ActionMode mode, Menu menu)

public boolean onActionItemClicked(ActionMode mode, MenuItem item)

public void onDestroyActionMode(ActionMode mode)

             可以在onCreateActionMode方法中inflate菜单的资源文件。在这个方法中也可以设置此时的title。

             可以在onActionItemClicked方法中设置点击删除菜单项后所触发的事件。

        

            Contextual action mode不仅可以在ListView中实现,也可以在其他的view,如GirdView实现。

            如果既不是ListView,也不是GirdView,也是可以实现的。需要实现一个接口,View.OnLongClickListener。在实现这个接口时,可以通过

             Acitivty.startActionMode(…..)方法来创建一个 ActionMode实例,这个方法的唯一参数是ActionMode.CallBack接口的实例。

发表评论
用户名: 匿名