国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

android tv列表焦點記憶實現的方法

2019-10-22 18:13:20
字體:
來源:轉載
供稿:網友

在Android android/234343.html">tv中的開發中,經常要跟焦點打交道,一個常見的需求是要有焦點記憶功能,焦點移動到列表中的某一項中,焦點移出去,在回來時焦點還要定位到原來的項目上,對于這種需求,常見的實現方式是列表用用listview或者recyclerview實現,維護一個變量去存儲上次的焦點位置,并在焦點變動或者按鍵事件中去維護這個變量和使用這個變量來定位.

具體實現

比如說用recyclerview實現列表時,在每個itemview的按鍵事件中,根據按鍵的方向和當前view的位置,判斷是否是向外移走焦點的,如果是,那么就去設置父view也就是recyclerview的焦點模式,并且要保存當前view的位置信息

 

復制代碼 代碼如下:
recyclerview.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);

 

在用戶操作移回焦點時,由于前一步設置了焦點模式為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();            }          }        }      }    });

如代碼所示,在焦點變動處理中,設置view的焦點模式,可以讓子view獲取焦點;拿到上一步保存的位置信息來手動設置焦點.

后面介紹另一種更簡便的方法,有更好的封裝性,不需要外層邏輯做維護處理.

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 中西区| 关岭| 昌吉市| 双流县| 阿图什市| 平果县| 中宁县| 新泰市| 台中市| 宁南县| 恩施市| 青海省| 大新县| 凤山市| 兰考县| SHOW| 天水市| 芒康县| 永年县| 襄垣县| 宜春市| 宿州市| 团风县| 交口县| 绥中县| 江孜县| 恭城| 潮州市| 太白县| 霍城县| 商城县| 波密县| 肇州县| 蓝山县| 洪湖市| 宣汉县| 谷城县| 抚松县| 辉南县| 临猗县| 临朐县|