過去我使用“startActivityForResult”和“onActivityResult”。這些方法現在已被棄用。因此,我想使用現代替代方案“registerForActivityResult”。
然而,不幸的是,我無法找到一種方法來使用這個新模型實作舊功能。我曾經覆寫“AppCompatActivity”的“startActivityForResult”和“onActivityResult”,以在任何活動開始之前以及任何活動以結果結束時運行特定代碼。這非常方便,因為我不必為每次活動啟動撰寫代碼。
正如我現在所看到的,我為結果注冊了活動并傳遞了一個回呼以獲取一個啟動器,我可以在以后使用它來啟動該活動。這部分我可以通過創建一個函式來使用始終執行某些代碼的啟動器來解決。但是回呼有問題。正如我所看到的,我必須將此特定代碼寫入我為任何活動啟動撰寫的每個回呼的回呼中。
我是正確的還是我錯過了什么?
uj5u.com熱心網友回復:
有幾種方法可以做到這一點:
1)將通用代碼放在自己的函式中,并在每個回呼中呼叫該函式。將需要撰寫的代碼減少到 1 行
2)撰寫一個回呼類GenericCallback。然后撰寫您的特定回呼 MySpecificCallback extends GenericCallback。將通用代碼放在 GenericCallback 類中,您只需在特定回呼中呼叫 super 即可。將代碼減少為只呼叫 super.callbackFunction,但這意味著您不能使用 lambda - 您必須使用命名或匿名類。不過,這可能更像是一種 Java 方法
3)為 registerForActivityResult 創建一個接受回呼的包裝函式,并呼叫真正的 registerForActivityResult 回呼呼叫公共代碼和您的回呼示例:
fun registerWrapper(callback: ()->Unit) {
registerForActivityResult(() ->{
doCommonCode()
callback()
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/405618.html
標籤:
