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

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

Fragment 多層嵌套方法調(diào)用問(wèn)題的解決方案

2019-12-12 05:32:52
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

Fragment的產(chǎn)生與介紹

Android運(yùn)行在各種各樣的設(shè)備中,有小屏幕的手機(jī),超大屏的平板甚至電視。針對(duì)屏幕尺寸的差距,很多情況下,都是先針對(duì)手機(jī)開(kāi)發(fā)一套App,然后拷貝一份,修改布局以適應(yīng)平板神馬超級(jí)大屏的。難道無(wú)法做到一個(gè)App可以同時(shí)適應(yīng)手機(jī)和平板么,當(dāng)然了,必須有啊。Fragment的出現(xiàn)就是為了解決這樣的問(wèn)題。你可以把Fragment當(dāng)成Activity的一個(gè)界面的一個(gè)組成部分,甚至Activity的界面可以完全有不同的Fragment組成,更帥氣的是Fragment擁有自己的生命周期和接收、處理用戶(hù)的事件,這樣就不必在Activity寫(xiě)一堆控件的事件處理的代碼了。更為重要的是,你可以動(dòng)態(tài)的添加、替換和移除某個(gè)Fragment。

Fragment的生命周期

Fragment必須是依存與Activity而存在的,因此Activity的生命周期會(huì)直接影響到Fragment的生命周期。官網(wǎng)這張圖很好的說(shuō)明了兩者生命周期的關(guān)系:

下面介紹下Fragment多層嵌套情況下如何解決方法調(diào)用的問(wèn)題

可能會(huì)出現(xiàn)同一個(gè)Activity中

對(duì)象1: A fragment

對(duì)象2:B fragment 中 a listview 或 a viewadapter

交互情況:B fragment 中的某一界面 獲取到信息后(可能是網(wǎng)絡(luò)信息等),傳遞給A fragment 或者 A fragment 處理過(guò)事件后又要通知B fragment 下的界面做出改變。

方案1

調(diào)用方法 通過(guò)中間人 Activity

在B fragment 內(nèi) 通過(guò)中間人 Activity 獲取到 A fragment 對(duì)象 調(diào)用A fragment 中的方法

弊端: 當(dāng)有很多層時(shí) 這種中間人的獲取就變成了多層中間人 ,需要處理中間人很多次

例如:想要調(diào)用在B fragment 中的 viewpager 的list 中的 pager類(lèi)父類(lèi) 的子類(lèi)對(duì)象中的方法時(shí)

1,子類(lèi)對(duì)象需要重寫(xiě)該方法

2,需要將父類(lèi)定義該方法

3,需要將B fragment 中找到list 中的子類(lèi)對(duì)象并調(diào)用該方法

4,需要在A Fragment 中找到 Bfragment 對(duì)象 調(diào)用該方法

由此可見(jiàn) 當(dāng)嵌套方式越復(fù)雜, 這個(gè)方法需要處理的 層次關(guān)系就越多。。。所以采用方案2

方案2

接口方式

在A fragment 中 定義接口

這里展示案例 通過(guò)定義接口的方式在Afragment 調(diào)用B fragment 的方法:

public class A_Fragment extends BaseFragment { private onSwitchpaperListener onSwitchpaperListener; //定義接口和接口方法 public interface onSwitchpaperListener{ void switchpaper(int i); } //對(duì)外提供一個(gè)設(shè)置監(jiān)聽(tīng)的方法。 public void setOnSwichtpaerListener(onSwitchpaperListener listener){ this.onSwitchpaperListener=listener; } @Override public void intiEvent() { //這這之前處理了很多邏輯和信息后需要將消息通過(guò)Afragment 傳遞給B了 if(onSwitchpaperListener!=null){ onSwitchpaperListener.switchpaper(position); }else { } } }

而B(niǎo)fragment 只需要 實(shí)現(xiàn)接口并 重寫(xiě)接口方法 即可被A fragment 調(diào)用

在B fragment 中的 許多莫名嵌套內(nèi)的類(lèi)中:

mainActivity.getAFragment().setOnSwichtpaerListener(new Slidingleft_Fragment.onSwitchpaperListener() { @Override public void switchpaper(int i) { BaseCenterPaper currentPaper= baseCenterPaperList.get(i); tv_title.setText(lists.get(i).getTitle()); //先移除 fl.removeAllViews(); currentPaper.initData(); fl.addView(currentPaper.getRoot()); } }); 

以上所述是小編給大家介紹的Fragment 多層嵌套方法調(diào)用問(wèn)題的解決方案,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)武林網(wǎng)網(wǎng)站的支持!

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 富民县| 江川县| 南开区| 瓦房店市| 安新县| 荥阳市| 葫芦岛市| 麟游县| 呈贡县| 渝北区| 进贤县| 林州市| 应城市| 潞城市| 晋江市| 梁山县| 崇州市| 叶城县| 康平县| 淮安市| 驻马店市| 军事| 澜沧| 济源市| 乡城县| 淮南市| 阿克苏市| 白玉县| 尖扎县| 浏阳市| 邹城市| 夏河县| 诸暨市| 桐庐县| 沈丘县| 镇平县| 兰西县| 平乡县| 叶城县| 建平县| 阳谷县|