第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

安卓PagerAdapter中的isViewFromObject()方法有什么用?

安卓PagerAdapter中的isViewFromObject()方法有什么用?

陪伴而非守候 2019-04-09 20:25:52
publicabstractbooleanisViewFromObject(Viewview,Objectobject)DetermineswhetherapageViewisassociatedwithaspecifickeyobjectasreturnedbyinstantiateItem(ViewGroup,int).ThismethodisrequiredforaPagerAdaptertofunctionproperly.ParametersviewPageViewtocheckforassociationwithobjectobjectObjecttocheckforassociationwithviewReturnstrueifviewisassociatedwiththekeyobjectobjectapi這么寫,判斷view是不是和object相關(guān),還是不大懂要干嘛?
查看完整描述

2 回答

?
UYOU

TA貢獻(xiàn)1878條經(jīng)驗(yàn) 獲得超4個(gè)贊

樓上表達(dá)的太慘不忍睹,問(wèn)題不回答就帶著你繞。理清楚了再回答,不要強(qiáng)答。百度里還一堆復(fù)制他的回答,真tm??!本身不是復(fù)雜的問(wèn)題特地注冊(cè)帳號(hào)回答
以下正文:前提概念:ViewPager里面對(duì)每個(gè)頁(yè)面的管理是key-value形式的,也就是說(shuō)每個(gè)page都有個(gè)對(duì)應(yīng)的id(id是object類型),需要對(duì)page操作的時(shí)候都是通過(guò)id來(lái)完成的
首先看這個(gè)函數(shù)publicObjectinstantiateItem(ViewGroupcontainer,intposition);這是pageAdapter里的函數(shù),功能就是往PageView里添加自己需要的page。同時(shí)注意它還有個(gè)返回值object,這就是那個(gè)id。
最后publicabstractbooleanisViewFromObject(Viewview,Objectobject)這個(gè)函數(shù)就是用來(lái)告訴框架,這個(gè)view的id是不是這個(gè)object。谷歌官方推薦把view當(dāng)id用,所以常規(guī)的instantiateItem()函數(shù)的返回值是你自己定義的view,而isViewFromObject()的返回值是view==object。
ps:感覺這個(gè)機(jī)制應(yīng)該是歷史遺留問(wèn)題,屬于改bug改出來(lái)的機(jī)制。否則官方不會(huì)推薦這種把view當(dāng)id的做法。
最最后:如有錯(cuò)誤,望指正,以免誤導(dǎo)后來(lái)者。
                            
查看完整回答
反對(duì) 回復(fù) 2019-04-09
?
眼眸繁星

TA貢獻(xiàn)1873條經(jīng)驗(yàn) 獲得超9個(gè)贊

PagerAdapter的一個(gè)方法是
publicObjectinstantiateItem(ViewGroupcontainer,intposition)
Createthepageforthegivenposition.Theadapterisresponsibleforaddingtheviewtothecontainergivenhere,althoughitonlymustensurethisisdonebythetimeitreturnsfromfinishUpdate(ViewGroup).
Parameters
containerThecontainingViewinwhichthepagewillbeshown.
positionThepagepositiontobeinstantiated.
Returns
ReturnsanObjectrepresentingthenewpage.ThisdoesnotneedtobeaView,butcanbesomeothercontainerofthepage.
該方法聲明了返回值不一定是view,可以是任意對(duì)象。要知道view的添加是在該方法內(nèi)部,通過(guò)container來(lái)添加的,所以這個(gè)方法不一定要返回view。
而isViewFromObject方法是用來(lái)判斷pager的一個(gè)view是否和instantiateItem方法返回的object有關(guān)聯(lián),如果有關(guān)聯(lián)做什么呢?去看代碼吧ViewPager源碼,你去看下addNewItem方法,會(huì)找到instantiateItem的使用方法,注意這里的mItems變量。然后你再搜索下isViewFromObject,會(huì)發(fā)現(xiàn)其被infoForChild方法調(diào)用,返回值是ItemInfo。再去看下ItemInfo的結(jié)構(gòu),其中有一個(gè)object對(duì)象,該值就是instantiateItem返回的。
也就是說(shuō),ViewPager里面用了一個(gè)mItems(ArrayList)來(lái)存儲(chǔ)每個(gè)page的信息(ItemInfo),當(dāng)界面要展示或者發(fā)生變化時(shí),需要依據(jù)page的當(dāng)前信息來(lái)調(diào)整,但此時(shí)只能通過(guò)view來(lái)查找,所以只能遍歷mItems通過(guò)比較view和object來(lái)找到對(duì)應(yīng)的ItemInfo。
說(shuō)的有些亂,好好看源碼就懂了!
                            
查看完整回答
反對(duì) 回復(fù) 2019-04-09
  • 2 回答
  • 0 關(guān)注
  • 788 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)