1. 程式人生 > >ActionBar 建立自定義的Action Provider

ActionBar 建立自定義的Action Provider

建立自定義的Action Provider

當你想要建立一個有動態行為和在溢位選單中有預設圖示的action view時,,繼承ActionProvider類來定義這些行為是一個比好的的方案。建立自己的action provider,提供一個有組織的可重用的元件,而不是在Fragment或Activity的程式碼中處理各種action item的變換和行為。要建立自己的action provider,只需簡單的繼承ActionProvider類,並且實現合適的回撥方法。你應該實現以下重要的回撥方法:

◆ActionProvider()

這個構造器把應用程式的Context物件傳遞個操作提供器,你應該把它儲存在一個成員變數中,以便其他的回撥方法使用。

◆OnCreateActionView()

這是你給選單項定義action view的地方。使用從構造器中接收的Context物件,獲取一個LayoutInflater物件的例項,並且用XML資源來填充action view,然後註冊事件監聽器。如程式碼清單4-14所示:

複製程式碼
public View onCreateActionView() {

    LayoutInflater layoutInflater = LayoutInflater.from(mContext);

    View view = layoutInflater.inflate(R.layout.action_provider, null
); ImageButton button = (ImageButton) view.findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // Do something... } }); return view; }
複製程式碼

程式碼清單4-14

◆onPerformDefaultAction()

在選中溢位選單中的選單時,系統會呼叫這個方法,並且是action provider對應的 點選選中的選單項執行預設的操作。

重寫這個方法設定點選該選單項時的預設動作action。

但是,如果你的action provider提供了一個子選單,即使是溢位選單中一個選單項的子選單,那麼也要通過onPrepareSubMenu()回撥方法來顯示子選單。

這樣onPerformDefaultAction()在子選單顯示時就不會被呼叫。注意:實現了onOptionsItemSelected()回撥方法的Activity或Frament物件能夠通過處理item-selected事件(並且返回true)來覆蓋action provider的預設行為,這種情況下,系統不會呼叫onPerformDefaultAction()回撥方法。