1. 程式人生 > 實用技巧 >Android 彈窗AlertDialog 上下文選單ContextMenu

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("確定儲存(*^▽^*)", new
DialogInterface.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上線歐陽燊著