我想要達到的目標:
我想獲取按鈕文本作為函式的引數
我想要的是:
// Operators - setOnClickListener
btnDivide.setOnClickListener { viewModel.mountOperator(it.text) }
btnMultiply.setOnClickListener { viewModel.mountOperator(it.text) }
btnMinus.setOnClickListener { viewModel.mountOperator(it.text) }
btnPlus.setOnClickListener { viewModel.mountOperator(it.text) }
什么作業:
// Operators - setOnClickListener
btnDivide.setOnClickListener { viewModel.mountOperator(btnDivide.text) }
btnMultiply.setOnClickListener { viewModel.mountOperator(btnMultiply.text) }
btnMinus.setOnClickListener { viewModel.mountOperator(btnMinus.text) }
btnPlus.setOnClickListener { viewModel.mountOperator(btnPlus.text) }
出現的問題:
錯誤:Unresolved reference: text,當我在執行it.text
但在 setOnClickListener{ it: View!} 中時,我看到了這個預覽,因為它通常顯示出來。所以我認為,這里指的it是我設定onClickListener.
如果對問題有任何困惑,請在評論中寫下。如果我的方法是錯誤的,請在評論中分享
uj5u.com熱心網友回復:
所以我認為,這里指的是我設定 onClickListener 的按鈕。
在這里,it是 typeView而不是 type Button,或者您希望它成為的任何型別的特定視圖型別,因此因為并非所有視圖都具有text屬性(這意味著View沒有稱為 的東西text,但Button可能),您可以使用一些東西像這樣:
btnDivide.setOnClickListener { viewModel.mountOperator((it as Button).text) }
您可以在其中替換Button為任何型別的視圖。
it as Button正在將Viewwe get 轉換為我們的特定型別,在您的情況下,我假設這將是一個按鈕,但您可以將其轉換為它實際是的任何型別的視圖。
it: View!這里確實指的是您將 onClickListener 設定為的按鈕,但它作為 aView而不是更具體的型別回傳給您
uj5u.com熱心網友回復:
還要跟進@a_local_nobody 的回答,它只是傳入泛型View而不是您設定點擊偵聽器的型別的原因是因為您可以創建單個偵聽器物件/函式并將其重用于所有需要的東西處理點擊(可能是 的不同子類View)
因此,如果您愿意,可以制作其中一個并使用它,而不是為每個按鈕重復代碼:
fun handleButtonClick(view: View) {
if (view is Button) viewModel.mountOperator(view.text)
}
btnDivide.setOnClickListener { handleButtonClick(it) }
// or as a function reference
btnMultiply.setOnClickListener(::handleButtonClick)
當你分配多個相同的點擊監聽器(或者對一堆東西做同樣的事情)時,你可以做的另一件事就是做一個回圈
listOf(btnDivide, btnMultiply, btnMinus, btnPlus).forEach {
it.setOnClickListener { //bla bla }
}
這適用于重用函式參考或僅為每個偵聽器創建一個新的參考(就像您在問題中所做的那樣)-它只會讓您重復自己,閱讀起來更容易,如果您需要進行更改,您只需必須在一個地方做
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/327444.html
