Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android技術基礎 >> 第44章、上下文菜單ContextMenu(從零開始學Android)

第44章、上下文菜單ContextMenu(從零開始學Android)

編輯:Android技術基礎

上下文菜單ContextMenu可以像操作Options Menu那樣給上下文菜單增加菜單項。

  上下文菜單與Options Menu最大的不同在於,Options Menu的擁有者是Activity,而上下文菜單的擁有者是Activity中的View。每個Activity有且只有一個Options Menu,它為整個Activity服務。而一個Activity往往有多個View,並不是每個View都有上下文菜單,這就需要我們顯示地通過registerForContextMenu(View view)來指定。
 
  盡管上下文菜單的擁有者是View,生成上下文菜單卻是通過Activity中的onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo)方法,該方法很像生成Options Menu的onCreateOptionsMenu(Menu menu)方法。兩者的不同在於,onCreateOptionsMenu只在用戶第一次按“Menu”鍵時被調用,而onCreateContextMenu會在用戶每一次長按View時被調用,而且View必須已經注冊了上下文菜單。

 

  一、程序文件 

  在上一章節OptionsMenu我們通過xml文件配置菜單項,本章我們直接采用代碼完成,故不使用布局文件。

  打開“src/com.genwoxue.contextmenu/MainActivity.java”文件。

  然後輸入以下代碼:

[java] view plain copy  
  1. package com.genwoxue.contextmenu;  
  2.   
  3. import android.os.Bundle;  
  4. import android.view.View;    
  5. import android.app.ListActivity;    
  6. import android.view.ContextMenu;    
  7. import android.view.ContextMenu.ContextMenuInfo;    
  8. import android.view.Menu;    
  9. import android.view.MenuItem;    
  10. import android.widget.ArrayAdapter;    
  11. import android.widget.Toast;  
  12.   
  13. public class MainActivity extends ListActivity {  
  14.   
  15.     @Override      
  16.     protected void onCreate(Bundle savedInstanceState) {  
  17.           
  18.         super.onCreate(savedInstanceState);  
  19.         // 顯示列表  
  20.         simpleShowList();  
  21.         // 為所有列表項注冊上下文菜單  
  22.         this.registerForContextMenu(getListView());      
  23.       
  24.     }  
  25.       
  26.     private void simpleShowList() {  
  27.           
  28.         // 模擬文件列表,在項目中可以實際讀取文件列表  
  29.         String[] files =new String[] {  
  30.                 "關於工信部網站備案通知.doc",   
  31.                 "企業年度預決算報表.xls",  
  32.                 "客戶說明會.ppt",  
  33.                 "企業形像宣傳片.avi"   
  34.         };  
  35.           
  36.         // 數據適配器 simple array adapter  
  37.         ArrayAdapter adapter =new ArrayAdapter(this,android.R.layout.simple_list_item_1,files);   
  38.           
  39.         // 填充列表  
  40.         this.setListAdapter(adapter);  
  41.   
  42.         }  
  43.   
  44.     @Override  
  45.     public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {  
  46.   
  47.         // 設置ContextMenu標題  
  48.         menu.setHeaderTitle("文件操作");  
  49.         // 添加ContextMenu菜單項  
  50.         menu.add(0, 1, Menu.NONE, "藍牙發送");  
  51.         menu.add(0, 2, Menu.NONE, "標記為重要");  
  52.         menu.add(0, 3, Menu.NONE, "重命名");  
  53.         menu.add(0, 4, Menu.NONE, "刪除");  
  54.     }  
  55.       
  56.     @Override  
  57.     public boolean onContextItemSelected(MenuItem item) {  
  58.               
  59.         // 得到當前被選中的item信息  
  60.         switch(item.getItemId()) {  
  61.             case 1:  
  62.                 Toast.makeText(getApplicationContext(), "發送文件", Toast.LENGTH_SHORT).show();  
  63.                 break;  
  64.             case 2:  
  65.                 Toast.makeText(getApplicationContext(), "標記為重要☆☆☆", Toast.LENGTH_SHORT).show();  
  66.                 break;  
  67.             case 3:  
  68.                 Toast.makeText(getApplicationContext(), "重命名", Toast.LENGTH_SHORT).show();  
  69.                 break;  
  70.             case 4:  
  71.                 Toast.makeText(getApplicationContext(), "刪除", Toast.LENGTH_SHORT).show();  
  72.                 break;  
  73.             default:  
  74.                 return super.onContextItemSelected(item);  
  75.             }  
  76.         return true;  
  77.     }  
  78. }  

  ContextMenu與OptionsMenu菜單有著很多相似之和,在此就不贅述了。

 

  二、運行結果

  

  \  \ 

 

特別說明:


  另一個值得注意的ContextMenuInfo,該類的對象被傳入onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo)方法,那麼它有什麼用呢?有時候,視圖元素需要向上下文菜單傳遞一些信息,比如該View對應DB記錄的ID等,這就要使用ContextMenuInfo。需要傳遞額外信息的View需要重寫getContextMenuInfo()方法,返回一個帶有數據的ContextMenuInfo實現類對象。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved