1. 程式人生 > >一個方法搞定安卓路由跳轉

一個方法搞定安卓路由跳轉

前言

團隊分模組開發在大專案上很常見,但專案組A想跳轉到一個專案組B負責的Activity,此時若B未建立該Activity,則會影響專案進度,由此,安卓路由跳轉出現了

原理

原理比較簡單,大家都知道Context.startActivity()這個方法需要傳一個Context和需要啟動的Activity的Class類,而該方法就是利用執行時根據包名.類名來找到Class物件,然後使用Context.startActivity()來跳轉

程式碼實現

Java,使用了工具類靜態方法

public class JumpUtil {

    /**
     * 路由跳轉
     *
     * @param context      上下文
     * @param activityPath 要跳轉的類的全包名.類名
     * @param bundle       要傳遞的引數
     */
    public static void jump(Context context, String activityPath, Bundle bundle) {
        if (TextUtils.isEmpty(activityPath))
            return;
        try {
            Intent intent = new Intent(context, Class.forName(activityPath));
            if (bundle != null)
                intent.putExtras(bundle);
            context.startActivity(intent);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

使用
JumpUtil.jump(this, "com.lt.mylibrary.LibraryActivity", null);

Kotlin,使用了擴充套件方法實現

/**
 * 路由跳轉,使用Context呼叫即可
 * @param activityPath 要跳轉的類的全包名.類名
 * @param bundle       要傳遞的引數
 */
fun Context.jump(activityPath: String, bundle: Bundle? = null) {
    if (TextUtils.isEmpty(activityPath))
        return
    try {
        startActivity(Intent([email protected], Class.forName(activityPath)).apply {
            if (bundle != null)
                
[email protected]
(bundle) }) } catch (e: ClassNotFoundException) { e.printStackTrace() } } Context的子類內使用 jump("com.lt.mylibrary.LibraryActivity")

注意事項

  1. 要跳轉的類所在的module必須被主模組或當前模組引用,否則會找不到Class物件
  2. 傳入值必須是全包名.物件名,否則找不到Class物件
  3. 可以對包名的String串進行封裝,可以降低出錯率
  4. 比較規範的命名方式可以減少書寫錯誤
  5. 路由啟動Service可以自行擴充套件

相關推薦

一個方法路由

前言 團隊分模組開發在大專案上很常見,但專案組A想跳轉到一個專案組B負責的Activity,此時若B未建立該Activity,則會影響專案進度,由此,安卓路由跳轉出現了 原理 原理比較簡單,大家都知道Context.startActivity()這個方法需要傳一個Con

Cordova - 徹底中的微信支付插件!

以及 andro 發現 bug 輸入參數 為我 開始 如何 工具 你看到這個標題肯定會驚訝,一個Cordova的微信支付插件,有這麽誇張嗎?信不信由你,我相信,最終你會回來看這篇文章的! 一,不要使用的微信支付插件:https://github.com/xu-li/cord

Cordova - 徹底中的微信支付外掛!

Cordova:8.0.0 Android studio:3.2.1 你看到這個標題肯定會驚訝,一個Cordova的微信支付外掛,有這麼誇張嗎? 一,不要使用的微信支付外掛:https://github.com/xu-li/cordova-plugin-wechat  上面的外掛,是目前大家

一行程式碼全螢幕適配——簡單粗暴-低入侵,無繼承,簡單高效

話不多說,先上解決方案 方案一(推薦)  1.引用工具類       DensityHelper.java 2.在自定義的 Application onCreate 方法中加入     new Dens

一行程式碼6.0動態許可權獲取(請求許可權庫)

安卓6.0的動態許可權申請困擾了很多開發者,谷歌提供的官方申請方式過於繁複,程式碼量很大,也不夠優雅。於是,我寫了一個動態請求許可權庫,用來方便的獲取許可權以及進行一些處理。 依賴庫 使用這個庫需要minSdkVersion>11,build.gr

一個方法自定義tabBarItem中的控制元件位置均分

京東 qq 自定義tabbar控制元件均分 程式碼如下 //ViewController.m - (void)viewDidLoad { [super viewDidLoad

java判斷IOS還是不同的連線

protected void doGet(HttpServletRequest request, HttpServletResponse response, boolean headOnly) th

頁面使用Context.startActivity注意事項

因是:   Context中有一個startActivity方法,Activity繼承自Context,過載了startActivity方法。如果使用 Activity的startActivity方法,不會有任何限制,而如果使用Context的startActivity方法

開發其他app指定activity

宣告:                 0、原創,轉載請備註本文連結                 1、所提供連結內容僅供參考,後果自負                 2、真正的大師,永遠都懷著一

app微信應用

最近公司突然提出app裡面直接開啟微信應用並且跳轉到公司的公眾號賬號,以為很輕鬆的實現,結果以百度,微信官方居然關閉掉了介面,也就是功能不能實現,所以大家也不要這百度瞎折騰啊,好啊, 退而求其次,只好實現使用者app內部複製公眾號,點選跳轉微信應用,用網上的方法JumpTo

一個實驗華為hybrid-vlan基本配置及原理

華為 hybrid-vlan實驗拓撲:2. 實驗需求:PC1和PC3屬於VLAN10 PC2和PC4屬於VLAN20 PC5和PC6屬於VLAN30。VLAN10和20的成員都可以和VLAN30中PC5通信,但是VLAN10和VLAN20的成員之間不能通信(通過二層技術實現此需求,就是華為Hybrid

python 第一周(第一天) 我的python成長記 一個python數據挖掘!

__name__ -c pass class port .py contact 成長 class a python代碼的組織方式: .py 文件 模塊文件樣式: #!/usr/bin/python#-*-coding:utf8-*- """@author: yugengde

python 第一周(第三天) 我的python成長記 一個python數據挖掘!(04)

數字 date .get raw dict 元素 upd 轉換成 efault 字符串 str 和 unicode str 字節流 unicode 字符流 (中文,英文,等等) => 如何轉換成計算機中的01代碼呢?   出現了編碼 ascii, iso8859

python 第二周(第八天) 我的python成長記 一個python數據挖掘!(14)

num print 數據 span python rate string spa rom from lxml import etreedoubanhtml = ‘‘‘‘‘‘doc = etree.fromstring(doubanhtml)for eachbook in d

python 第二周(第八天) 我的python成長記 一個python數據挖掘!(15)

center project ron 高層 web 快速 art start mes scrapy爬蟲 企業級爬蟲:python開發的一個快速,高層次的web抓取框架,用於抓取web站點並從頁面提取結構化的數據。 scrapy用途廣泛,可用於數據挖掘,數據監測和自動化測試

python 第二周(第十一天) 我的python成長記 一個python數據挖掘!(19) -scrapy + mongo

msg 步驟 [0 ssi xtra tin perl overflow tab mongoDB 3.2之後默認是使用wireTiger引擎 在啟動時更改存儲引擎:   mongod --storageEngine mmapv1 --dbpath d:\data\db 這

簡便方法第三方SDK的Jar包在DelphiXE5中的引入

earch html targe bject jar itl clas article .html 簡便方法搞定第三方SDK的Jar包在DelphiXE5中的引入 (2014-02-21 17:30:17) 轉載▼ 標簽: android delphi

Java 11 快要來了,編譯 & 運行一個命令

新版本 真的 alt eba 符號 pat oot AD 命令編譯 Java 11 馬上要來了,原定於 9 月發布,還有不到 3 個月了,敬請期待更多新功能被加入到 11 當中,本文本講的是 JEP 330 這個新特性。 化繁為簡,一個命令編譯運行源代碼 看下面的代碼。 /

從另一個思路來學習事件分發機制

從另一個思路來學習安卓事件分發機制 前言 事件分發機制是一個安卓老生常談的話題了,從前幾年的面試必問題到如今的本當成預設都會的基礎知識。關於這方面的部落格網上已經有很多很多了,有從原始碼分析的,有從實際出發開始分析的等等。面對這麼多的教程,小白可能一頭霧水不知道從哪裡看起,而且看完之後感覺啥也沒留下。那麼

使用gevent.monkey.patch_all() 協程池遇到阻塞,在任務中新增一個sleep()

關於使用gevent.monkey.patch_all()協程池遇到阻塞解決辦法: import time ... class Example: ... time.sleep(0.000001) 在進行多執行緒時monkey會阻塞住執行緒的繼續執行,需要對monkey.p