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アドレス
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") ?: ""
}
}
}
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)
}
}
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()
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)
}
}
MutableParamsActivity().apply {
intParams = 1 //
booleanParams = true
stringParams = "123"
customParams = CustomParams1()
intListParams = arrayListOf(1,2,3)
intArrayParams = IntArray(2) { it }
}.start(context)
var customKeyParams by mutableParams("this is custom key")
var defaultParams by mutableParams(defaultValue = BigDecimal.ONE)