Bracer(手首保護)-ActivityまたはFragmentへのパラメータの安全かつ迅速な伝達

5680 ワード

Bracer


各ActivityまたはFragment間の安全かつ迅速な伝達パラメータ

First Blood


親、2020年になったのに、まだこのようなコードを書いていますか?
val param1 = intent.getStringExtra("param1")
//param1  , 
if (param1 != null) {
    //using param1
}

または
class ActivityB : AppCompatActivity() {
    private fun gotoActivityA() {
        val intent = Intent(this, ActivityA::class.java)
        intent.putExtra("key_1", "123")
        startActivity(intent)
    }
}

class ActivityA : AppCompatActivity() {
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        //oh shit, wtf!!  key , 
        val valueA = intent.getStringExtra("key_l")
        
    }
}

さらに、
//Oh my god!  Fragment ?
class FragmentA : Fragment() {
    var a: String = ""
    var b: String = ""

    companion object {
        fun newFragment(a: String, b: String): FragmentA {
            val fragmentA = FragmentA()
            val bundle = Bundle()
            bundle.putString("key_a", a)
            bundle.putString("key_b", b)
            fragmentA.arguments = bundle
            return fragmentA
        }
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        arguments?.let {
            a = it.getString("key_a") ?: ""
            b = it.getString("key_b") ?: ""
        }
    }
}

私はただ简単にパラメータを伝えたいだけで、どうして私にこんなに多くのコードを书かせますか??疲れた...
心配しないで、今Bracerがあります!!

Double kill


新世紀にパラメータを正しく伝える方法を見てみましょう
Fragmentでパラメータを取得するには、次の手順に従います.
class MutableParamsFragment : Fragment() {
    // 
    var intParams by mutableParams()
    var booleanParams by mutableParams()
    var stringParams by mutableParams()

    // 
    var customParams by mutableParams()

    //list
    var intListParams by mutableParams>()
    var stringListParams by mutableParams>()
    
    //array
    var intArrayParams by mutableParams()
    var arrayCustomParams by mutableParams>()

    // 
    //...

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // , Arguments 
        println(intParams)
        println(booleanParams)
        println(stringParams)
        println(customParams)
        println(intListParams)
        println(stringListParams)
        println(intArrayParams)

    }
}

ご覧のように、Fragmentからパラメータを取得するのは簡単で、非常に安全です!!
そしてほとんどのタイプをサポートします!
空のポインタnullには遭遇しません.すべてのパラメータにはデフォルト値があります.keyが間違って書くことはなく、すべてのパラメータはデフォルトで自分の名前をkeyとしています.
等しい:val byteParams=arguments.getByte("byteParams", 0) var stringParams = arguments.getString("stringParams") ?: ""
次に、パラメータを渡す方法について説明します.
val fragment = MutableParamsFragment().apply {
    intParams = 1  // 
    booleanParams = true
    stringParams = "123"

    customParams = CustomParams1()
    intListParams = arrayListOf(1,2,3)

    intArrayParams = IntArray(2) { it }
}

//show this Fragment
val beginTransaction = supportFragmentManager.beginTransaction()
beginTransaction.add(R.id.frameLayout, fragment, "")
beginTransaction.commit()


Amazing!! はい、こんなに不思議で、パラメータを渡すのはこんなに簡単です!

Double Kill


次にActivityの様子を見てみましょう
class MutableParamsActivity : AppCompatActivity() {
    // 
    var intParams by mutableParams()
    var booleanParams by mutableParams()
    var stringParams by mutableParams()

    // 
    var customParams by mutableParams()

    //list
    var intListParams by mutableParams>()
    var stringListParams by mutableParams>()
    
    //array
    var intArrayParams by mutableParams()
    var arrayCustomParams by mutableParams>()

    // 
    //...

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_test)

        // , Intent 
        println(intParams)
        println(booleanParams)
        println(stringParams)
        println(customParams)
        println(intListParams)
        println(stringListParams)
        println(intArrayParams)

    }
}

Fragmentと同様にActivityからパラメータを取得するのは依然として簡単で、非常に安全です!!空のポインタnullには遭遇しません.すべてのパラメータにはデフォルト値があります.keyが間違って書くことはなく、すべてのパラメータはデフォルトで自分の名前をkeyとしています.
等しい:val byteParams=intent.getByteExtra("byteParams", 0) var stringParams = intent.getStringExtra("stringParams") ?: ""
次に、パラメータを渡す方法について説明します.
MutableParamsActivity().apply {
    intParams = 1  // 
    booleanParams = true
    stringParams = "123"

    customParams = CustomParams1()
    intListParams = arrayListOf(1,2,3)

    intArrayParams = IntArray(2) { it }
}.start(context)

???あなたが間違っていないことを確認しますか?どうしてActivityをnewできるの??
はい、このように不思議で、Fragmentの使い方とほぼ一致して、ただ少し騒ぎをしました!

Triple Kill


この他にも、Bracerはいくつかの他の特性をサポートする.
たとえばカスタムキー:
var customKeyParams by mutableParams("this is custom key")

または、カスタムデフォルト値をサポートします.
var defaultParams by mutableParams(defaultValue = BigDecimal.ONE)

天輝優勝、GG


Githubアドレス