日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Android 菜單(ContextMenu)

系統(tǒng) 3246 0

Android 菜單(ContextMenu)

?

Android 的ContextMenu,即上下文菜單。(類(lèi)似電腦上的鼠標(biāo)右鍵功能,選中某個(gè)元素,然后點(diǎn)右鍵,在彈出菜單上執(zhí)行操作。)在手機(jī)上,通過(guò)長(zhǎng)時(shí)間按住界面上的元素,就會(huì)出現(xiàn)事先設(shè)計(jì)好的上下文菜單。

?

主要用到的方法有:

    // 創(chuàng)建顯示上下文菜單
setOnCreateContextMenuListener

//監(jiān)聽(tīng)長(zhǎng)按事件
setOnItemLongClickListener

//監(jiān)聽(tīng)普通按鍵事件
setOnItemClickListener

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

//監(jiān)聽(tīng)上下文菜單關(guān)閉事件
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個(gè)ListView
	private ListView listView = null;
	//定義ListView需要顯示的數(shù)據(jù)
	private ArrayList<ArrayList<Object>> viewInfos = null;
	//定義上下文菜單
	final private static int CONTEXT_MENU_EDIT = 0;//菜單[編輯]的編號(hào) 
	final private static int CONTEXT_MENU_SHARE = 1;//菜單[分享]的編號(hào) 
	final private static int CONTEXT_MENU_DELETE = 2;//菜單[刪除]的編號(hào) 
	final private static int CONTEXT_MENU_CANCEL = 3;//菜單[取消]的編號(hào) 
	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);
        //初始化要顯示的內(nèi)容
    	initListViewInfos();
        //顯示ListView
        showListView();
        //顯示ListView的上下文菜單
        showListViewContextMenu();
    }
	
	/**
	 * 初始化ListView需要顯示的內(nèi)容.
	 */
	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顯示內(nèi)容中刪除1條記錄.
	 */
	public void removeItem(int index){
		viewInfos.get(0).remove(index);
	}
	/**
	 * 從ListView顯示內(nèi)容中讀取1條記錄
	 * @param index
	 * @return
	 */
	public Object readItem(int index){
		return viewInfos.get(0).get(index);
	}
	
	/**
	 * 讀取當(dāng)前執(zhí)行的菜單
	 * @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參數(shù)
    	int[] to = {R.id.main_list_view_item_item_text};
    	int resource = R.layout.main_list_view_item;
    	
    	//生成適配器:使用自定義工具類(lèi) SimpleAdapterUtil.java來(lái)生成適配器
    	SimpleAdapter simpleAdapter = SimpleAdapterUtil.create(context,viewInfos,resource,to); 
    	
    	listView = (ListView)findViewById(R.id.main_list_view_listview);
    	listView.setAdapter(simpleAdapter);
    }
    /**
     * 顯示ListView的上下文菜單
     */
    public void showListViewContextMenu(){
    	//創(chuàng)建上下文菜單
    	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());
				}
			}
    	});
    	
    	//監(jiān)聽(tīng)列表項(xiàng)目的長(zhǎng)按事件
    	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()+"]被長(zhǎng)時(shí)間點(diǎn)擊了.",Toast.LENGTH_SHORT).show();
				return false;
			}
    		
    	});
    	
    	//監(jiān)聽(tīng)列表項(xiàng)目的普通點(diǎn)擊事件
    	listView.setOnItemClickListener(new OnItemClickListener(){

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

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

	@Override
	public void onContextMenuClosed(Menu menu) {//關(guān)閉上下文菜單
		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, "取消"),
    		};
  

參考 關(guān)于菜單基礎(chǔ)屬性的實(shí)體類(lèi)

?

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

參考 1個(gè)簡(jiǎn)單的SimpleAdapter工具類(lèi)-SimpleAdapterUtil(版本二:數(shù)據(jù)格式為ArrayList<ArrayList<Object>>)

?

?

?

關(guān)于根據(jù)上下文菜單來(lái)獲取當(dāng)前選中的GridView(或ListView等)的元素

?

    		//OnCreateContextMenuListener
		gridPhoneBook.setOnCreateContextMenuListener(new OnCreateContextMenuListener(){
			@Override
			public void onCreateContextMenu(ContextMenu menu, View v,
					ContextMenuInfo menuInfo) {
				//獲取上下文菜單點(diǎn)擊的GridView中的元素
				AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;
				int position = info.position;
				//設(shè)置上下文菜單的標(biāo)題
				PhoneBook phoneBook = (PhoneBook)phoneBookAdapter.getItem(position);
				menu.setHeaderTitle(phoneBook.getName());
				//設(shè)置上下文菜單
				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());
				}
			}
		}); 
	

/**
	 * 上下文菜單-具體菜單的執(zhí)行操作.
	 */
	@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)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 扶沟县| 北京市| 通化县| 庆城县| 浦江县| 茂名市| 赤壁市| 通辽市| 玉门市| 呈贡县| 铜山县| 浦江县| 油尖旺区| 临武县| 喀什市| 溆浦县| 达孜县| 乾安县| 微山县| 遵义县| 景洪市| 三原县| 沿河| 灵丘县| 平阳县| 界首市| 巴马| 库尔勒市| 屯昌县| 莱芜市| 仙居县| 那曲县| 油尖旺区| 腾冲县| 广汉市| 迁西县| 瑞金市| 如皋市| 柘城县| 徐州市| 嘉定区|