Điều khiển tiếp theo mà tôi muốn muốn giới thiệu đến với các bạn đó là OptionMenu. Điều khiển này cho phép bạn tạo ra một phương thức mới để người dùng lựa chọn khi sử dụng ứng dụng trên bada, điều này tương tự như điều khiển Tab và điều khiển ContextMenu.

Làm việc với OptionMenu cũng đơn giản như bạn làm việc với Tab hay ContextMenu vậy. Đầu tiên bạn tạo một dự án bada kiểu form đơn giản như các bài trước. Lần này tôi đặt tên cho ứng dụng là OptionMenuDemo và đặt tên cho lớp form của mình là OptionMenuForm. Và để đưa OptionMenu vào form của chúng ta, đầu tiên ở cửa sổ Properties của form chính bạn phải thiết đặt thuộc tính Option Key là true như hình vẽ bên dưới:

Tiếp đến, ở tập tin OptionMenuForm.h trong phần khai báo lớp OptionMenuForm bạn khai báo thêm các biến sau:

	static const int ID_OPTIONKEY = 200;
	static const int ID_OPTIONMENU_ITEM1  = 201;
	static const int ID_OPTIONMENU_ITEM2 = 202;
        static const int ID_OPTIONMENU_ITEM3 = 203;

	Osp::Ui::Controls::OptionMenu* __pOptionMenu;

Sau đó, ở tập tin OptionMenuForm.cpp bạn tìm đến phương thức OnInitializing() và thêm vào các dòng mã sau:

	// Create an OptionMenu
	__pOptionMenu = new OptionMenu();
	__pOptionMenu->Construct();
	__pOptionMenu->AddItem("Item1",ID_OPTIONMENU_ITEM1);
	__pOptionMenu->AddItem("Item2",ID_OPTIONMENU_ITEM2);
        __pOptionMenu->AddItem("Item3",ID_OPTIONMENU_ITEM3);

	SetOptionkeyActionId(ID_OPTIONKEY);
	AddOptionkeyActionListener(*this);

Và để xử lí các sự kiện khi người dùng nhấn vào OptionMenu, bạn tìm đến phương thức OnActionPerformed() để thêm vào các dòng mã sau:

	switch(actionId)
	{
        //xử lí các sự kiện khác ở đây
        ...

	case ID_OPTIONKEY:
            //Người dùng nhấn vào Option Menu
	    __pOptionMenu->SetShowState(true);
	    __pOptionMenu->Show();
	break;

        case ID_OPTIONMENU_ITEM1:
        // Todo: Người dùng lựa chọn item 1
    	break;

        case ID_OPTIONMENU_ITEM2:
        // Todo: Người dùng lựa chọn item 2
    	break;

        case ID_OPTIONMENU_ITEM3:
        // Todo: Người dùng lựa chọn item 3
    	break;

        //xử lí các sự kiện khác ở đây
        ...

	default:
		break;
	}

Giống như ContextMenu bạn không thể thêm OptionMenu trong Popup, tuy nhiên với OptionMenu thì bạn không thể sử dụng Icon.

Như vậy là bạn đã hoàn tất việc thêm OptionMenu vào ứng dụng của mình, bây giờ bạn biên dịch và chạy ứng dụng lên.

Không chỉ dừng lại ở đó, OptionMenu còn cung cấp thêm một mức lựa chọn nữa cho chúng ta. Các mục chọn ở mức 2 được gọi là SubItem.

Bây giờ bạn thêm vào một số dòng mã sau để thêm vào OptionMenu của chúng ta 2 SubItem nằm trong Item1.

  • Khai báo thêm 2 ActionID:
	static const int ID_OPTIONMENU_SUBITEM11  = 301;
	static const int ID_OPTIONMENU_SUBITEM12  = 302;
  • Sửa lại phương thức OnInitializing() trong tập tin OptionMenuForm.cpp:
	// Create an OptionMenu
	__pOptionMenu = new OptionMenu();
	__pOptionMenu->Construct();
	__pOptionMenu->AddItem("Item1",ID_OPTIONMENU_ITEM1);
	__pOptionMenu->AddItem("Item2",ID_OPTIONMENU_ITEM2);
	__pOptionMenu->AddItem("Item3",ID_OPTIONMENU_ITEM3);
	__pOptionMenu->AddSubItem(0,"SubItem1",ID_OPTIONMENU_SUBITEM11);
	__pOptionMenu->AddSubItem(0,"SubItem2",ID_OPTIONMENU_SUBITEM12);

	SetOptionkeyActionId(ID_OPTIONKEY);
	AddOptionkeyActionListener(*this);
  • Thêm vào câu lệnh switch của phương thức để xử lí trường hợp người dùng lựa chọn SubItem:
        switch(actionId)
	{
        //xử lí các sự kiện khác ở đây
        ...

        case ID_OPTIONMENU_SUBITEM11:
        // Todo: Người dùng lựa chọn sub item 1
    	break;

        case ID_OPTIONMENU_SUBITEM12:
        // Todo: Người dùng lựa chọn sub item 2
    	break;

        //xử lí các sự kiện khác ở đây
        ...

	default:
		break;
	}

Như các bạn thấy, thì khi ta thêm các Item vào OptionMenu chúng sẽ được đánh chỉ số bắt đầu từ 0 theo thứ tự ta gọi phương thức AddItem(), vì thế muốn thêm SubItem vào đúng Item mong muốn thì bạn phải nhớ chỉ số của Item đó.

Bây giờ, bạn biên dịch lại và chạy ứng dụng lên lần nữa. Kết quả sẽ tương tự như hình sau:

Chúc các bạn thành công!