Android 彈窗AlertDialog 上下文選單ContextMenu
彈窗AlertDialog 上下文選單ContextMenu這兩個結合可以實現長按列表item出現選單,點選選單項彈出對話方塊進行進一步操作。
-
對話方塊AlertDialog
AlertDialog是Android中最常用的對話方塊,可以完成常見的互動操作,如提示、確認、選擇等功能。 AlertDialog沒有公開的建構函式,必須藉助AlertDialog.Builder才能完成引數設定,AlertDialog.Builder的常用方法如下。
- setIcon:設定標題的圖示。
- setTitle:設定標題的文字。
- setMessage:設定內容的文字。
- setPositiveButton:設定肯定按鈕的資訊,包括按鈕文字和點選監聽器。
- setNegativeButton:設定否定按鈕的資訊,包括按鈕文字和點選監聽器。
- setNeutralButton:設定中性按鈕的資訊,包括按鈕文字和點選監聽器,該方法比較少用。
- setView:寫一個XML檔案設定更多樣式和控制元件
通過AlertDialog.Builder設定完引數,還需呼叫create方法才能生成AlertDialog物件。最後呼叫 AlertDialog物件的show方法,在頁面上彈出提醒對話方塊
private AlertDialog alertDialog1; View view1 = View.inflate(root.getContext(),R.layout.activity_alter_dialog_setview, null); //root.getContext是Fragment中的上下文(View root = inflater.inflate(R.layout.fragment_record, container, false);) alertDialog1 = new AlertDialog.Builder(root.getContext()) .setTitle("修改記錄")//標題 .setView(view1) .setIcon(R.mipmap.ic_launcher)//圖示 .setPositiveButton("確定儲存(*^▽^*)", newDialogInterface.OnClickListener() {//新增"Yes"按鈕 @Override public void onClick(DialogInterface dialogInterface, int i) { //TODO } }) .create(); alertDialog1.show();
-
上下文選單ContextMenu
彈出上下文選單的途徑有兩種:
(1)預設在某個控制元件被長按時彈出。通常在onStart函式中加入registerForContextMenu方法為指定控制元件 註冊上下文選單,在onStop函式中加入unregisterForContextMenu方法為指定控制元件登出上下文選單。
(2)在除長按事件之外的其他事件中開啟上下文選單。先執行registerForContextMenu方法註冊選單, 然後執行openContextMenu方法開啟選單,最後執行unregisterForContextMenu方法登出選單。
實現上下文選單的功能需要重寫以下兩種方法。
- onCreateContextMenu:在此指定選單列表的XML檔案,作為上下文選單列表項的來源。
- onContextItemSelected:在此對不同的選單項做分支處理。
registerForContextMenu(listView);//為ListView註冊上下文選單 /** * 設定選單列表項 * @param menu * @param v * @param menuInfo */ public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); menu.setHeaderTitle("操作:");
menu.add(1,1,1,"刪除記錄"); menu.add(2,2,2,"修改記錄"); } /** * 處理不同的選單項 * @param item * @return */ public boolean onContextItemSelected(MenuItem item) { //獲取上下文選單介面卡 AdapterView.AdapterContextMenuInfo cmi=(AdapterView.AdapterContextMenuInfo)item.getMenuInfo(); //獲取被選擇的選單位置 int posMenu=cmi.position; //將選單項與列表檢視的條目相關聯 Nbp_choosen_data =(Nbp_data)myListAdapter.getItem(posMenu); switch(item.getItemId()){ case 1://刪除選中項 //TODO break; case 2://修改選中項 //TODO break; default: break; } return super.onContextItemSelected(item); }
menu.add 這個方法裡面有四個引數,它們的意義分別為:
第一個int型別的group ID引數,代表的是組概念,你可以將幾個選單項歸為一組,以便更好的以組的方式管理你的選單按鈕。
它對應方法int i = item.getGroupId();
第二個int型別的item ID引數,代表的是專案編號。這個引數非常重要,一個item ID對應一個menu中的選項。
在後面使用選單的時候,就靠這個item ID來判斷你使用的是哪個選項。它對應int id = item.getItemId();
第三個int型別的order ID引數,代表的是選單項的顯示順序。預設是0,表示選單的顯示順序就是按照add的顯示順序來顯示。
如果兩個位置數值一樣,那麼先定義的拍前面。而且,groupid並不影響排列順序。
第四個String型別的title引數,表示選項中顯示的文字。
選單menu除了上下文選單ContextMenu(通過長按事件觸發, 對應Windows上的右鍵選單)以外,還有選項選單OptionMenu(通過按選單 鍵或點選事件觸發,對應Windows上的開始選單)
可以參考下面這篇blog。
參考:https://blog.csdn.net/xbean1028/article/details/104799163/新增上下文選單內容menu-add方法引數意義 by江山點墨
移動開發叢書·Android Studio開發實戰:從零基礎到App上線歐陽燊著