1.要实例化一个上下文菜单,应调用以下函数
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size:18px;">@Override</span></span>
<span style="font-size:18px;">public void onCreateContextMenu(ContextMenu menu,View v,ContextMenuInfo menuInfo){
getActivity().getMenuInflater().inflate(R.menu.list_item_context, menu);<span style="white-space:pre"> </span>//长按视图,就会调用这句代码,其中,R.menu.list_item_context是自定义的xml资源
}</span>
2.要响应用户的上下文菜单选择,可以实现一下Fragment的方法
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size:18px;">@Override</span></span>
<span style="font-size:18px;"> public boolean onContextItemSelected(MenuItem item){
AdapterContextMenuInfo info=(AdapterContextMenuInfo)item.getMenuInfo();
int position=info.position;<span style="white-space:pre"> </span>//因为是列表视图,所以要确定选择的视图位置
CrimeAdapter adapter=(CrimeAdapter)getListAdapter();<span style="white-space:pre"> </span>//获取列表视图的 ListAdapter;
Crime crime=adapter.getItem(position);<span style="white-space:pre"> </span>//通过列表视图的ListAdapter获取相关联的 Item
switch(item.getItemId()){<span style="white-space:pre"> </span>//确认点击的ContextMenu的Item的Id
case R.id.menu_item_delete_crime:
CrimeLab.get(getActivity()).deleteCrime(crime);<span style="white-space:pre"> </span>//本菜单Item的作用是删除选中项
adapter.notifyDataSetChanged();
return true;
}
return super.onContextItemSelected(item);
}</span>
3.最后,要实现长按列表项能弹出上下文菜单,需要在LIstFragment中的onCreateView()函数中注册视图,ListView中会有很多视图,但只需注册ListView就可以了:
<span style="font-size:18px;">@Override
public View onCreateView(LayoutInflater inflater,ViewGroup parent,Bundle savedInstanceState){
View v=super.onCreateView(inflater, parent, savedInstanceState);
ListView listView=(ListView)v.findViewById(android.R.id.list);
//Use floating context menus on Froyo and Gingerbread
registerForContextMenu(listView); //注册ListView以后,就可以长按视图调用
//onCreateContextMenu()函数了,
//然后点击菜单项调用onContextItemSelected()函数
return v;
}</span>