亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Android 菜單(ContextMenu)

系統 3521 0

Android 菜單(ContextMenu)

?

Android 的ContextMenu,即上下文菜單。(類似電腦上的鼠標右鍵功能,選中某個元素,然后點右鍵,在彈出菜單上執行操作。)在手機上,通過長時間按住界面上的元素,就會出現事先設計好的上下文菜單。

?

主要用到的方法有:

    // 創建顯示上下文菜單
setOnCreateContextMenuListener

//監聽長按事件
setOnItemLongClickListener

//監聽普通按鍵事件
setOnItemClickListener

//上下文菜單的選中事件
onContextItemSelected

//監聽上下文菜單關閉事件
onContextMenuClosed
  
?

?


示例(ListView上下文菜單)

?


Android 菜單(ContextMenu)
?

Android 菜單(ContextMenu)
?

效果圖

?

main_list_view.xml 配置

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<ListView
    android:id="@+id/main_list_view_listview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    />
</LinearLayout>
  

?

main_list_view_item.xml配置

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:id="@+id/RelativeLayout_Item"
	android:layout_width="fill_parent" android:layout_height="wrap_content"
	android:paddingBottom="5dip"
	>
	<TextView 
		android:id="@+id/main_list_view_item_item_text"
		android:layout_centerHorizontal="true" 
		android:layout_width="wrap_content"
		android:layout_height="wrap_content" 
		android:textSize="20px"
		android:layout_gravity="center"
		/>
</LinearLayout>
  

?

Activity代碼

    package com.zhouzijing.android;

import java.util.ArrayList;
import com.zhouzijing.android.util.MenuEntity;
import com.zhouzijing.android.util.SimpleAdapterUtil;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.View.OnCreateContextMenuListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;

public class Menu2 extends Activity {
	final Context context = this;
	//定義1個ListView
	private ListView listView = null;
	//定義ListView需要顯示的數據
	private ArrayList<ArrayList<Object>> viewInfos = null;
	//定義上下文菜單
	final private static int CONTEXT_MENU_EDIT = 0;//菜單[編輯]的編號 
	final private static int CONTEXT_MENU_SHARE = 1;//菜單[分享]的編號 
	final private static int CONTEXT_MENU_DELETE = 2;//菜單[刪除]的編號 
	final private static int CONTEXT_MENU_CANCEL = 3;//菜單[取消]的編號 
	private int itemLongClickSelected = 0;
    private MenuEntity[] contextMenus = {
    		new MenuEntity(0, CONTEXT_MENU_EDIT, 0, "編輯"),
    		new MenuEntity(0, CONTEXT_MENU_SHARE, 1, "分享"),
    		new MenuEntity(0, CONTEXT_MENU_DELETE, 2, "刪除"),
    		new MenuEntity(0, CONTEXT_MENU_CANCEL, 3, "取消"),
    		};

	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_list_view);
        //初始化要顯示的內容
    	initListViewInfos();
        //顯示ListView
        showListView();
        //顯示ListView的上下文菜單
        showListViewContextMenu();
    }
	
	/**
	 * 初始化ListView需要顯示的內容.
	 */
	public void initListViewInfos(){
		viewInfos = new ArrayList<ArrayList<Object>>();
		ArrayList<Object> countrys = new ArrayList<Object>();
		countrys.add("Austria");
		countrys.add("China");
		countrys.add("Egypt");
		countrys.add("France");
		countrys.add("Ireland");
		countrys.add("Japan");
		countrys.add("Spain");
		countrys.add("United Kingdom");
		countrys.add("United States");
		viewInfos.add(countrys);
	}
	
	/**
	 * 從ListView顯示內容中刪除1條記錄.
	 */
	public void removeItem(int index){
		viewInfos.get(0).remove(index);
	}
	/**
	 * 從ListView顯示內容中讀取1條記錄
	 * @param index
	 * @return
	 */
	public Object readItem(int index){
		return viewInfos.get(0).get(index);
	}
	
	/**
	 * 讀取當前執行的菜單
	 * @param index
	 * @return
	 */
	public CharSequence readContextMenu(int index){
		for(int i=0;i<contextMenus.length;i++){
			if(contextMenus[i].getItemId()==index) return contextMenus[i].getTitle();
		}
		return "";
	}
	/**
     * 顯示ListView.
     */
    public void showListView(){
    	final Context context = this;
    	
    	//定義適配器to參數
    	int[] to = {R.id.main_list_view_item_item_text};
    	int resource = R.layout.main_list_view_item;
    	
    	//生成適配器:使用自定義工具類 SimpleAdapterUtil.java來生成適配器
    	SimpleAdapter simpleAdapter = SimpleAdapterUtil.create(context,viewInfos,resource,to); 
    	
    	listView = (ListView)findViewById(R.id.main_list_view_listview);
    	listView.setAdapter(simpleAdapter);
    }
    /**
     * 顯示ListView的上下文菜單
     */
    public void showListViewContextMenu(){
    	//創建上下文菜單
    	listView.setOnCreateContextMenuListener(new OnCreateContextMenuListener(){

			@Override
			public void onCreateContextMenu(ContextMenu menu, View v,
					ContextMenuInfo menuInfo) {
				menu.setHeaderTitle(readItem(itemLongClickSelected).toString());
				MenuEntity menuEntity = null;
				for(int i=0;i<contextMenus.length;i++){
					menuEntity = contextMenus[i];
					menu.add(menuEntity.getGroupId(),menuEntity.getItemId(),menuEntity.getOrder(),menuEntity.getTitle());
				}
			}
    	});
    	
    	//監聽列表項目的長按事件
    	listView.setOnItemLongClickListener(new OnItemLongClickListener(){

			@Override
			public boolean onItemLongClick(AdapterView<?> parent, View view,
					int position, long id) {
				itemLongClickSelected = position;
				Toast.makeText(context,"item["+position+":"+readItem(itemLongClickSelected).toString()+"]被長時間點擊了.",Toast.LENGTH_SHORT).show();
				return false;
			}
    		
    	});
    	
    	//監聽列表項目的普通點擊事件
    	listView.setOnItemClickListener(new OnItemClickListener(){

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				Toast.makeText(context,"item["+position+":"+readItem(position).toString()+"]被點擊了.",Toast.LENGTH_SHORT).show();
			}
    	});
    }

	@Override
	public boolean onContextItemSelected(MenuItem item) {//執行上下文菜單中的菜單
		int itemId = item.getItemId();
		Toast.makeText(context,"Context menu item["+itemId+":"+readContextMenu(itemId)+"] is Selected.",Toast.LENGTH_SHORT).show();
		if(CONTEXT_MENU_DELETE==itemId){//刪除
			//當前選中的ListView中的item編號
			int index = itemLongClickSelected;
			//在當前ListView中刪除選中的元素
			removeItem(index);
			//重新顯示ListView
			showListView();
		}
		return super.onContextItemSelected(item);
	}

	@Override
	public void onContextMenuClosed(Menu menu) {//關閉上下文菜單
		Toast.makeText(context,"Context Menu is Closed.",Toast.LENGTH_SHORT).show();
		super.onContextMenuClosed(menu);
	}
    
    
}
  
?

?

備注:

?

    private MenuEntity[] contextMenus = {
    		new MenuEntity(0, CONTEXT_MENU_EDIT, 0, "編輯"),
    		new MenuEntity(0, CONTEXT_MENU_SHARE, 1, "分享"),
    		new MenuEntity(0, CONTEXT_MENU_DELETE, 2, "刪除"),
    		new MenuEntity(0, CONTEXT_MENU_CANCEL, 3, "取消"),
    		};
  

參考 關于菜單基礎屬性的實體類

?

    SimpleAdapter simpleAdapter = SimpleAdapterUtil.create(context,viewInfos,resource,to); 
  

參考 1個簡單的SimpleAdapter工具類-SimpleAdapterUtil(版本二:數據格式為ArrayList<ArrayList<Object>>)

?

?

?

關于根據上下文菜單來獲取當前選中的GridView(或ListView等)的元素

?

    		//OnCreateContextMenuListener
		gridPhoneBook.setOnCreateContextMenuListener(new OnCreateContextMenuListener(){
			@Override
			public void onCreateContextMenu(ContextMenu menu, View v,
					ContextMenuInfo menuInfo) {
				//獲取上下文菜單點擊的GridView中的元素
				AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;
				int position = info.position;
				//設置上下文菜單的標題
				PhoneBook phoneBook = (PhoneBook)phoneBookAdapter.getItem(position);
				menu.setHeaderTitle(phoneBook.getName());
				//設置上下文菜單
				MenuEntity menuEntity;
				for(int i=0;i<CONTEXT_MENUS.length;i++){
					menuEntity = CONTEXT_MENUS[i];
					menu.add(menuEntity.getGroupId(), menuEntity.getItemId()
							,menuEntity.getOrder(),menuEntity.getTitle());
				}
			}
		}); 
	

/**
	 * 上下文菜單-具體菜單的執行操作.
	 */
	@Override
	public boolean onContextItemSelected(MenuItem item) {
		
		//獲取選中的GridView的元素
		AdapterContextMenuInfo info = (AdapterContextMenuInfo)item.getMenuInfo();
		int position = info.position;
		PhoneBook phoneBook = (PhoneBook)phoneBookAdapter.getItem(position);
		//菜單ID
		int menuId = item.getItemId();
		switch(menuId){
		case CONTEXT_MENU_PHONE_BOOK_DELETE:
			doContextMenuOfDelete(phoneBook);
			break;
		}
		return super.onContextItemSelected(item);
	}
  
?

?

?

?

?

?

?

Android 菜單(ContextMenu)


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 久久中文字幕一区二区三区 | 九九视频精品在线 | 97在线观看免费视频 | 伊人免费视频二 | 中文字幕在线观看亚洲日韩 | 日本一区二区三区四区五区 | 四虎永久在线精品视频播放 | 亚洲精品人成在线观看 | bbbb成人毛片免费看 | 久久免费看片 | 国产欧美日韩综合精品一区二区 | 国产毛片一区二区三区 | 亚洲欧美日韩在线不卡 | 伊人久久综合谁合综合久久 | 国产精品一区久久 | 色sese| 波多野结衣免费免费视频一区 | 青草在线视频 | 亚洲精品国产综合一线久久 | 免费看黄色录像 | 日韩国产精品欧美一区二区 | 欧美性白人顶级hd | 亚洲三级天堂 | 老司机精品久久 | 奇米色偷偷 | 99精品国内不卡在线观看 | 日韩在线视频在线 | 久九精品| 偷自拍视频区综合视频区 | 一级毛毛片 | 国产精品亚洲高清一区二区 | 女人18级毛片久久 | 国产欧美日韩精品专区 | 狠色狠狠色狠狠狠色综合久久 | 亚洲免费视频在线观看 | 色偷偷亚洲女性天堂 | 国产综合精品一区二区 | 国内精品视频一区二区三区八戒 | 性做久久久久久坡多野结衣 | 4hu四虎 | 一级韩国aa毛片免费观看 |