我想對 OnCheckedChangeListener 使用 lambda 而不是匿名類。設置偵聽器的原始代碼工作正常,內容如下:mCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) { mCrime.setSolved(isChecked); }});我嘗試通過執行以下操作將其更改為 lambda:mCheckBox.setOnCheckedChangeListener(l -> mCrime.setSolved(isChecked));但我收到來自 Android Studio 的錯誤消息:無法解析符號已檢查。我原以為 lambda 會隱式解析 isChecked,即使 onCheckChanged 需要兩個參數。我的理解有什么問題?
3 回答

弒天下
TA貢獻1818條經驗 獲得超8個贊
你的語法是錯誤的。你所擁有的甚至不應該編譯。用這個:
mCheckBox.setOnCheckedChangeListener((view, isChecked) -> mCrime.setSolved(isChecked));
前面的東西->
不代表偵聽器,而是在該偵聽器中傳遞的參數,在這種情況下是一個視圖和一個布爾值。

蕭十郎
TA貢獻1815條經驗 獲得超13個贊
isChecked 只是一個參數名稱,當您使用 lambdas 時它不存在,但是這里是正確的 lambda 和您的 onCheckChangeListener 的參數名稱
mCheckBox.setOnCheckedChangeListener((CompoundButton.OnCheckedChangeListener) (buttonView, isChecked) -> mCrime.setSolved(isChecked));

慕碼人2483693
TA貢獻1860條經驗 獲得超9個贊
setOnCheckedChangeListener
有兩個參數
CompoundButton buttonView, boolean isChecked
,所以 lambda 語句將是
mCheckBox.setOnCheckedChangeListener(buttonView, isChecked -> mCrime.setSolved(isChecked))
話雖如此,我對 Java lambdas 還不夠熟悉,不知道它是否可以處理多個參數。
添加回答
舉報
0/150
提交
取消