【发布时间】:2020-07-30 19:51:58
【问题描述】:
我在MyFragment : Fragment 类中定义了以下扩展方法:
fun View.showSoftKeyboard() {
if (requestFocus()) {
val imm = requireActivity().getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT)
}
}
我想从MyFragment : Fragment中提取出View.showSoftKeyboard()扩展方法,这样我就可以在每个片段中使用它了。
但是,如果我创建此 Fragment.showSoftKeyboard(),我将无法访问 View 对象:
fun Fragment.showSoftKeyboard() {
if (requestFocus()) {
val imm = requireActivity().getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
// "this" won't be a View anymore, but a Fragment
imm.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT)
}
}
如果我将其保留为View.showSoftKeyboard(),我将无法访问requireActivity():
fun View.showSoftKeyboard() {
if (requestFocus()) {
// requireActivity() won't be accessible anymore
val imm = requireActivity().getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT)
}
}
有什么方法可以从外部定义Fragment 中View 的扩展方法,所以我可以同时访问视图对象以及Fragment 中的requireActivity()上课?
【问题讨论】:
标签: android kotlin android-fragments extension-methods