为ListView创建ContextMenu

来源:互联网 发布:p2p网络摄像头软件app 编辑:程序博客网 时间:2024/05/22 07:02
ContextMenu称为上下文菜单,一般在控件上长按时弹出。今天我们学习ContextMenu的用法,这里与listview相结合,先在ListView显示几个Item,然后在Item上长按,弹出一个菜单(就是ContextMenu),点击菜单上的项目,提示刚才长按的Item的Position。

main.xml文件
Java代码  收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent" android:layout_height="fill_parent"  
  4.     android:orientation="vertical">  
  5.   
  6.     <TextView android:id="@+id/text" android:text="zzz"  
  7.         android:textSize="18sp" android:textColor="#FFFFFF"  
  8.         android:layout_width="fill_parent" android:layout_height="wrap_content"/>  
  9.       
  10.     <ListView android:id="@+id/list"  
  11.         android:layout_width="fill_parent" android:layout_height="fill_parent">  
  12.     </ListView>  
  13. </LinearLayout>  


菜单有3个条目,在/res/menu/test_menu.xml中定义,和OptionMenu差不多,只是没有Icon
Java代码  收藏代码
  1. package com.hello.menu;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.view.ContextMenu;  
  6. import android.view.Menu;  
  7. import android.view.MenuInflater;  
  8. import android.view.MenuItem;  
  9. import android.view.View;  
  10. import android.view.ContextMenu.ContextMenuInfo;  
  11. import android.widget.AdapterView.AdapterContextMenuInfo;  
  12. import android.widget.ArrayAdapter;  
  13. import android.widget.ListView;  
  14. import android.widget.SimpleAdapter;  
  15. import android.widget.TextView;  
  16.   
  17. public class ApiDemos extends Activity {  
  18.     /** Called when the activity is first created. */  
  19.       
  20.     private TextView mTextView;  
  21.     private ListView mListView;  
  22.     private String [] values;  
  23.     @Override  
  24.     public void onCreate(Bundle savedInstanceState) {  
  25.         super.onCreate(savedInstanceState);  
  26.         setContentView(R.layout.main);  
  27.         mTextView = (TextView) findViewById(R.id.text);  
  28.   
  29.         //下面的代码用于初始化一些数据  
  30.         values = new String[30];  
  31.         StringBuilder sb = new StringBuilder("z");  
  32.         for (int i = 0; i < values.length; i++) {  
  33.             sb.append(i);  
  34.             values[i] = sb.toString();  
  35.         }  
  36.   
  37.         mListView = (ListView) findViewById(R.id.list);  
  38.         mListView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, values));  
  39.         mTextView.setText(String.valueOf(mListView.getAdapter().getCount()));  
  40.           
  41.         //为ListView注册ContextMenu  
  42.         registerForContextMenu(mListView);  
  43.     }  
  44.   
  45.     //创建ContextMenu  
  46.     @Override  
  47.     public void onCreateContextMenu(ContextMenu menu, View v,  
  48.             ContextMenuInfo menuInfo) {  
  49.         // TODO Auto-generated method stub  
  50.         if (v.getId() == R.id.list) {  
  51.             MenuInflater inflater = getMenuInflater();  
  52.             menu.setHeaderTitle("contextView sample").setHeaderIcon(R.drawable.icon);  
  53.             inflater.inflate(R.menu.test_menu, menu);  
  54.         }  
  55.         super.onCreateContextMenu(menu, v, menuInfo);  
  56.     }  
  57.       
  58.     @Override  
  59.     public boolean onContextItemSelected(MenuItem item) {  
  60.         // TODO Auto-generated method stub  
  61.         if (item.getMenuInfo() instanceof AdapterContextMenuInfo) {  
  62.             AdapterContextMenuInfo menuInfo = (AdapterContextMenuInfo) item.getMenuInfo();  
  63.                 //处理菜单的点击事件  
  64.             switch (item.getItemId()) {  
  65.             case R.id.call:  
  66.                 mTextView.setText(item.getTitle().toString() + menuInfo.position);  
  67.                 break;  
  68.             case R.id.cc:  
  69.                         mTextView.setText(item.getTitle().toString() + menuInfo.position);  
  70.                 break;  
  71.             case R.id.poweroff :  
  72.                         mTextView.setText(item.getTitle().toString() + menuInfo.position);  
  73.                 break;  
  74.             }  
  75.               
  76.         }  
  77.         return super.onContextItemSelected(item);  
  78.     }  
  79. }  

原创粉丝点击