Fragment 多層嵌套方法調(diào)用問題的解決方案
Fragment的產(chǎn)生與介紹
Android運行在各種各樣的設(shè)備中,有小屏幕的手機,超大屏的平板甚至電視。針對屏幕尺寸的差距,很多情況下,都是先針對手機開發(fā)一套App,然后拷貝一份,修改布局以適應(yīng)平板神馬超級大屏的。難道無法做到一個App可以同時適應(yīng)手機和平板么,當(dāng)然了,必須有啊。Fragment的出現(xiàn)就是為了解決這樣的問題。你可以把Fragment當(dāng)成Activity的一個界面的一個組成部分,甚至Activity的界面可以完全有不同的Fragment組成,更帥氣的是Fragment擁有自己的生命周期和接收、處理用戶的事件,這樣就不必在Activity寫一堆控件的事件處理的代碼了。更為重要的是,你可以動態(tài)的添加、替換和移除某個Fragment。
Fragment的生命周期
Fragment必須是依存與Activity而存在的,因此Activity的生命周期會直接影響到Fragment的生命周期。官網(wǎng)這張圖很好的說明了兩者生命周期的關(guān)系:

下面介紹下Fragment多層嵌套情況下如何解決方法調(diào)用的問題
可能會出現(xiàn)同一個Activity中
對象1: A fragment
對象2:B fragment 中 a listview 或 a viewadapter
交互情況:B fragment 中的某一界面 獲取到信息后(可能是網(wǎng)絡(luò)信息等),傳遞給A fragment 或者 A fragment 處理過事件后又要通知B fragment 下的界面做出改變。
方案1
調(diào)用方法 通過中間人 Activity
在B fragment 內(nèi) 通過中間人 Activity 獲取到 A fragment 對象 調(diào)用A fragment 中的方法
弊端: 當(dāng)有很多層時 這種中間人的獲取就變成了多層中間人 ,需要處理中間人很多次
例如:想要調(diào)用在B fragment 中的 viewpager 的list 中的 pager類父類 的子類對象中的方法時
1,子類對象需要重寫該方法
2,需要將父類定義該方法
3,需要將B fragment 中找到list 中的子類對象并調(diào)用該方法
4,需要在A Fragment 中找到 Bfragment 對象 調(diào)用該方法
由此可見 當(dāng)嵌套方式越復(fù)雜, 這個方法需要處理的 層次關(guān)系就越多。。。所以采用方案2
方案2
接口方式
在A fragment 中 定義接口
這里展示案例 通過定義接口的方式在Afragment 調(diào)用B fragment 的方法:
public class A_Fragment extends BaseFragment {
private onSwitchpaperListener onSwitchpaperListener;
//定義接口和接口方法
public interface onSwitchpaperListener{
void switchpaper(int i);
}
//對外提供一個設(shè)置監(jiān)聽的方法。
public void setOnSwichtpaerListener(onSwitchpaperListener listener){
this.onSwitchpaperListener=listener;
}
@Override
public void intiEvent() {
//這這之前處理了很多邏輯和信息后需要將消息通過Afragment 傳遞給B了
if(onSwitchpaperListener!=null){
onSwitchpaperListener.switchpaper(position);
}else {
}
}
}
而Bfragment 只需要 實現(xiàn)接口并 重寫接口方法 即可被A fragment 調(diào)用
在B fragment 中的 許多莫名嵌套內(nè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)用問題的解決方案,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
- Android Fragment的生命周期詳解
- Android Fragment概述及用法
- Android Fragment使用之實例演示
- Android開發(fā) Activity和Fragment詳解
- Android Fragment多層嵌套重影問題的解決方法
- Android 中 Fragment 嵌套 Fragment使用存在的bug附完美解決方案
- Android中關(guān)于FragmentA嵌套FragmentB的問題
- jQuery3.0中的buildFragment私有函數(shù)詳解
- Android 動態(tài)添加Fragment的實例代碼
- Android利用Fragment實現(xiàn)Tab選項卡效果
- Android Fragment+FragmentTabHost組件實現(xiàn)常見主頁面(仿微信新浪)
相關(guān)文章
Android ViewPager無限循環(huán)實現(xiàn)底部小圓點動態(tài)滑動
這篇文章主要為大家詳細(xì)介紹了Android ViewPager無限循環(huán)實現(xiàn)底部小圓點動態(tài)滑動的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-03-03
Android實現(xiàn)關(guān)機后數(shù)據(jù)不會丟失問題
這篇文章主要介紹了Android實現(xiàn)關(guān)機后數(shù)據(jù)不會丟失問題,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-10-10
Presenting?Streams?in?Flutter小技巧
這篇文章主要為大家介紹了Presenting?Streams?in?Flutter小技巧示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-12-12
Android?數(shù)據(jù)結(jié)構(gòu)全面總結(jié)分析
這篇文章主要為大家介紹了Android?數(shù)據(jù)結(jié)構(gòu)全面總結(jié)分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-12-12
深入學(xué)習(xí)Android?ANR?的原理分析及解決辦法
Android系統(tǒng)中,AMS和WMS會檢測App的響應(yīng)時間,如果App在特定時間無法相應(yīng)屏幕觸摸或鍵盤輸入時間,或者特定事件沒有處理完畢,就會出現(xiàn)ANR。本文將帶領(lǐng)大學(xué)深入學(xué)習(xí)一下ANR的原理及解決辦法,感興趣的同學(xué)可以學(xué)習(xí)一下2021-11-11
Android?內(nèi)存優(yōu)化知識點梳理總結(jié)
這篇文章主要介紹了Android?內(nèi)存優(yōu)化知識點梳理總結(jié),Android?操作系統(tǒng)給每個進程都會分配指定額度的內(nèi)存空間,App?使用內(nèi)存來進行快速的文件訪問交互,長時間如此便需要優(yōu)化策略,文章分享優(yōu)化知識點總結(jié),需要的朋友可以參考一下2022-06-06

