android tv列表焦點記憶實現(xiàn)的方法
在Android tv中的開發(fā)中,經(jīng)常要跟焦點打交道,一個常見的需求是要有焦點記憶功能,焦點移動到列表中的某一項中,焦點移出去,在回來時焦點還要定位到原來的項目上,對于這種需求,常見的實現(xiàn)方式是列表用用listview或者recyclerview實現(xiàn),維護一個變量去存儲上次的焦點位置,并在焦點變動或者按鍵事件中去維護這個變量和使用這個變量來定位.
具體實現(xiàn)
比如說用recyclerview實現(xiàn)列表時,在每個itemview的按鍵事件中,根據(jù)按鍵的方向和當前view的位置,判斷是否是向外移走焦點的,如果是,那么就去設(shè)置父view也就是recyclerview的焦點模式,并且要保存當前view的位置信息
在用戶操作移回焦點時,由于前一步設(shè)置了焦點模式為block,因此會父view會首先獲取焦點,增加焦點變動的事件處理:
recyclerview.setOnFocusChangeListener(new OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if(hasFocus){ Recyclerview recyclerview = (Recyclerview)v; recyclerView.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS); if(mCurrentFocusPosition>0){ LayoutManager layoutManager = recyclerView.getLayoutManager(); View viewByPosition = layoutManager.findViewByPosition(mCurrentFocusPosition); if(viewByPosition!=null){ viewByPosition.requestFocus(); } } } } });
如代碼所示,在焦點變動處理中,設(shè)置view的焦點模式,可以讓子view獲取焦點;拿到上一步保存的位置信息來手動設(shè)置焦點.
后面介紹另一種更簡便的方法,有更好的封裝性,不需要外層邏輯做維護處理.
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android編程之ListPreference用法實例分析
這篇文章主要介紹了Android編程之ListPreference用法,結(jié)合實例形式較為詳細的分析說明了ListPreference的功能、用法及相關(guān)注意事項,需要的朋友可以參考下2015-12-12ViewPager實現(xiàn)帶引導小圓點與自動跳轉(zhuǎn)的引導界面
這篇文章主要為大家詳細介紹了ViewPager實現(xiàn)帶引導小圓點與自動跳轉(zhuǎn)的引導界面,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-11-11Android使用分類型RecyclerView仿各大商城首頁
這篇文章主要為大家詳細介紹了Android使用分類型的RecyclerView仿各大商城首頁,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-02-02Android 出現(xiàn):java.lang.NoClassDefFoundError...錯誤解決辦法
這篇文章主要介紹了Android 出現(xiàn):Android出現(xiàn):java.lang.NoClassDefFoundError: android/os/PersistableBundle錯誤解決辦法的相關(guān)資料,需要的朋友可以參考下2017-03-03Android ListView彈性效果的實現(xiàn)方法
這篇文章主要為大家詳細介紹了Android ListView彈性效果的實現(xiàn)方法,感興趣的小伙伴們可以參考一下2016-05-05Android7.0指紋服務(wù)FingerprintService實例介紹
這篇文章主要介紹了Android7.0指紋服務(wù)FingerprintService介紹,需要的朋友可以參考下2018-01-01