欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2018年04月02日 09:45:28   作者:AndroidXing  
本篇文章主要介紹了android tv列表焦點(diǎn)記憶實(shí)現(xiàn)的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

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

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

比如說用recyclerview實(shí)現(xiàn)列表時(shí),在每個(gè)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í),由于前一步設(shè)置了焦點(diǎn)模式為block,因此會(huì)父view會(huì)首先獲取焦點(diǎn),增加焦點(diǎn)變動(dòng)的事件處理:

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)變動(dòng)處理中,設(shè)置view的焦點(diǎn)模式,可以讓子view獲取焦點(diǎn);拿到上一步保存的位置信息來手動(dòng)設(shè)置焦點(diǎn).

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

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論