Fragment在Android機頂盒上的應用

Fragment,很多人將其翻譯爲碎片,是一個依附於Activity而存在的控件。網上基本上大多是介紹Fragment的生命週期,或者從Google上翻譯的文檔。在機頂盒的環境下使用略有不同。

首先,因爲機頂盒的操作主要依賴於遙控器,而不是像手機那樣可以觸摸,所以,必然就要涉及到焦點的處理,而且非常頻繁。Fragment的焦點處理主要是以下兩種,對於有左側導航,右側爲Fragment的應用來說,首先需要解決的問題是如何將導航的焦點切換到右側。這裏以左側使用ListView做導航,右側使用Fragment爲例。

一、左側導航的焦點切換到右側,通常是直接將焦點定位到右側Fragment的第一個控件上,拿到該控件,比如:

TextView mAutoSearch;

//初始化等處理略

mAutoSearch.setFocusable(true);

mAutoSearch.requestFocus();

以上操作即可將焦點定位到mAutoSearch控件上。

二、從右側返回到左側導航:

通常在機頂盒上,需要重寫Back鍵。直接將操作的邏輯放到onKey()方法的BACKcase下即可,那麼具體怎麼操作,還是要以控件爲中心,拿到左側ListView對象,

ListView mListView;

//初始化等處理略

mListView.requestFocus();

mListView.setSelection(position);

這樣就可以將焦點定到對應的導航Item上了。

三、另外一個問題就是怎麼保證由一個Fragment切換到下一個Fragment的時候,返回仍然讓焦點定在跳轉之前的控件處。這個地方一開始讓我也很費解,網上也沒搜到好的處理方法,偶然翻看之前的項目,發現瞭解決辦法:

跳轉(replace)之前先記錄當前的控件位置,然後跳轉之前需要將當前的Fragment壓入回退棧。沒錯,就是調用transaction.addToBackStack(null)

不過別高興早了,這樣還是不行,關鍵的問題是怎麼讓焦點重定位。想想Fragment的生命週期方法,對的,就是一個onResume()只需要在這個方法裏重新將之前記錄的位置重新獲得焦點就好了。

發佈了36 篇原創文章 · 獲贊 7 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章