--《摘自android外掛程式化開發指南》
2.activity切換fragment頁面
第一步:fragmentloaderactivity作為fragment的承載容器
<activity
android:name
=".fragmentloaderactivity"
>
<
intent-filter
>
<
action
android:name
/>
<
category
android:name
="android.intent.category.default"
/>
intent-filter
>
activity
>
publicclass basehostactivity extends
activity
protected
void
loadresources()
catch
(exception e)
resources superres = super
.getresources();
mresources = new
resources(massetmanager, superres.getdisplaymetrics(),
superres.getconfiguration());
mtheme =mresources.newtheme();
mtheme.setto(
super
.gettheme());
}@override
public
assetmanager getassets()
@override
public
resources getresources()
@override
public
theme gettheme()
}
publicclass fragmentloaderactivity extends
basehostactivity );
object instance = localconstructor.newinstance(new
object {});
fragment f =(fragment) instance;
fragmentmanager fm =getfragmentmanager();
fragmenttransaction ft =fm.begintransaction();
ft.add(r.id.container, f);
ft.commit();
} catch
(exception e)
}}
第二步:
mainactivity跳轉到fragmentloaderactivity,傳兩個引數(dexpath和fragment的名稱),fragmentloaderactivity根據引數載入對應的fragment
intent intent = newstartactivity(intent);
3.外掛程式內部的fragment跳轉
publicclass basefragment extends
fragment
public
void setcontainerid(int
containerid)
}
publicclass fragment2 extends
basefragment
view.findviewbyid(r.id.btnreturn).setonclicklistener(
newview.onclicklistener()
});return
view;
}}
publicclass fragment1 extends
basefragment
});return
view;
}}
其實就是利用fragmentmanager動態切換fragment技術來實現
4.外掛程式fragment跳轉外掛程式外部的fragment(包括宿主中的,另乙個外掛程式中的)
第一步:把宿主和外掛程式的資源都合併到一起,這樣就能想用哪個資源就用哪個資源
publicclass
pluginmanager
}reloadinstalledpluginresources(pluginpaths);
} catch
(exception e)
}private
static
pluginitem generatepluginitem(string apkname)
private
static
void reloadinstalledpluginresources(arraylistpluginpaths)
resources newresources = new
resources(assetmanager,
mbasecontext.getresources().getdisplaymetrics(),
mbasecontext.getresources().getconfiguration());
refinvoke.setfieldobject(mbasecontext, "mresources", newresources);
//這是最主要的需要替換的,如果不支援外掛程式執行時更新,只留這乙個就可以了
refinvoke.setfieldobject(mpackageinfo, "mresources", newresources);
//清除一下之前的resource的資料,釋放一些記憶體
//因為這個resource有可能還被系統持有著,記憶體都沒被釋放
//clearresoucesdrawablecache(mnowresources);
mnowresources =newresources;
//需要清理mtheme物件,否則通過inflate方式載入資源會報錯
//如果是activity動態載入外掛程式,則需要把activity的mtheme物件也設定為null
refinvoke.setfieldobject(mbasecontext, "mtheme", null
); }
catch
(throwable e)
}}
第二步:把所有的外掛程式的classloader都放進乙個集合myclassloaders,在fragmentloaderactivity中,使用myclassloaders來載入相應外掛程式的fragment
publicclass
myclassloaders
publicclass fragmentloaderactivity extends
activity
else
fragment.setcontainerid(android.r.id.primary);
fragmentmanager fm =getfragmentmanager();
fragmenttransaction ft =fm.begintransaction();
ft.replace(android.r.id.primary, fragment);
ft.commit();
} catch
(exception e)
}@override
public
resources getresources()
}
fragment外掛程式化的好處避開了activity必須要面對ams的尷尬
避免fragment 重新例項化
在專案中需要進行fragment的切換,一直都是用replace 方法來替換fragment 但是,這樣會有乙個問題 應該很多朋友都遇到過 每次切換的時候,fragment都會重新例項化,也就是執行oncreatview 方法 那麼如何讓多個fragment彼此切換時不重新例項化?正確的切換方式是a...
基於jQuery 的外掛程式開發
談到jquery,對於開發人員是再熟悉不過了,從其誕生發展到到目前,一路走來,歷經風雨變化十幾載,依舊是開發人員使用最廣泛 最常用 也是最成熟的js庫。但其再成熟也不可能開發出所有的功能,於是乎就用了外掛程式這麼一說,用來拓展和補充jquery 的功能。外掛程式開發最常用的兩種方法 1.擴充套件 j...
火狐外掛程式安裝 基於web自動化測試
一 firebug 安裝 1 打 狐瀏覽器 選擇右上角 開啟選單 圖一 附件元件 圖二 圖一圖二 2 點選 擴充套件 圖三 用於所有附加元件的工具 圖四 選擇 從檔案安裝附加元件 圖三 圖四 3 找到firebug 2.0.16 xpi的路徑 點選開啟 圖五 4 彈出框點選 安裝 5 重啟瀏覽器按下...