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

首頁 > 系統(tǒng) > Android > 正文

android tv列表焦點(diǎn)記憶實(shí)現(xiàn)的方法

2019-12-12 01:03:26
字體:
供稿:網(wǎng)友

在Android tv中的開發(fā)中,經(jīng)常要跟焦點(diǎn)打交道,一個常見的需求是要有焦點(diǎn)記憶功能,焦點(diǎn)移動到列表中的某一項(xiàng)中,焦點(diǎn)移出去,在回來時焦點(diǎn)還要定位到原來的項(xiàng)目上,對于這種需求,常見的實(shí)現(xiàn)方式是列表用用listview或者recyclerview實(shí)現(xiàn),維護(hù)一個變量去存儲上次的焦點(diǎn)位置,并在焦點(diǎn)變動或者按鍵事件中去維護(hù)這個變量和使用這個變量來定位.

具體實(shí)現(xiàn)

比如說用recyclerview實(shí)現(xiàn)列表時,在每個itemview的按鍵事件中,根據(jù)按鍵的方向和當(dāng)前view的位置,判斷是否是向外移走焦點(diǎn)的,如果是,那么就去設(shè)置父view也就是recyclerview的焦點(diǎn)模式,并且要保存當(dāng)前view的位置信息

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

在用戶操作移回焦點(diǎn)時,由于前一步設(shè)置了焦點(diǎn)模式為block,因此會父view會首先獲取焦點(diǎn),增加焦點(diǎn)變動的事件處理:

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();            }          }        }      }    });

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

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 安新县| 丰城市| 汽车| 江城| 靖安县| 禄丰县| 同仁县| 湟中县| 吉林省| 明星| 唐河县| 阳朔县| 宣武区| 灯塔市| 德清县| 大名县| 盈江县| 肃宁县| 炉霍县| 龙海市| 青河县| 长武县| 陆丰市| 河津市| 新密市| 东乡族自治县| 黎城县| 义马市| 望城县| 贡嘎县| 云和县| 丹东市| 吴忠市| 仙居县| 曲阳县| 玉树县| 洪泽县| 延寿县| 忻州市| 新疆| 淮滨县|