Skip to content

msdx/dinny

Repository files navigation

Dinny

Download

Dinny是一个处理Android中Activity跳转的库。

Dinny 能做什么

假如我们所要跳转的TestActivity需要有相关的数据,以前我们可能是在调用的地方写下如下代码:

    val intent = Intent(this, TestActivity::class.java)
            .putExtra("boolean", isNew) // isNew为boolean类型
            .putExtra("data", user) // 假设User类实现了Parcelable接口
            .putExtra("number", number) // number为String类型
    startActivity(intent)

如果有多处地方跳转到这个界面,可能就需要在多处地方编写如上代码。当然,我们也可以将其抽出成为静态方式。但是将需要传数据的界面较多时,同样会面临重复代码较多的问题。

而使用Dinny,你可以如下实现:

将一个模块下的所有Activity跳转声明到一个接口文件中,如:

ActivityProtocol.kt

interface ActivityProtocol {
    @ToActivity(TestActivity::class)
    fun startTest(context: Context, @Extra("boolean") isNew: Boolean, @Extra("data") user: User, @Extra("number") number: String)
    
    // ...
}

然后在Activity中就可以如下调用:

    Dinny.create(ActivityProtocol::class.java).startTest(this, isNew, user, number)

如果使用kotlin的一些语法特性,代码还可以更简洁。如下: 先声明一个object:

object ActivityCtrl : ActivityProtocol by Dinny.create(ActivityProtocol::class.java)

然后前面调用的代码就可以简化为:

    ActivityCtrl.startTest(this, isNew, user, number)

如果我们不想要直接跳转,而是要返回一个Intent,来进行startActivityForResult或者添加一个Flag,那么声明接口时可以添加返回类型Intent,如下:

interface ActivityProtocol {
    @ToActivity(UserListActivity::class)
    fun chooseUserIntent(context: Context, @Extra("data") current: User): Intent
    
    // ...
}

Dinny 的思想

从其他界面跳转到一个界面来,需要传什么数据,可以看作是向这个界面跳转的一种协议。而将这些协议声明为接口里的方法,也就是把它们协议化,一可以简化代码,二可以提高代码阅读性,三则可以把一个功能模块下的所有界面跳转都进行集中管理,便于维护。 而这个接口可以认为是这个模块下的界面向外开放的协议,它是这个模块内的界面所期望的跳转方式。

获取 Dinny

implementation 'com.githang:dinny:0.1.1'

About

Dinny is a library to implement the idea of protocol Activity jumps

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published