Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android kotlin-如何为工具栏backbutton按创建属性委托_Android_Kotlin - Fatal编程技术网

Android kotlin-如何为工具栏backbutton按创建属性委托

Android kotlin-如何为工具栏backbutton按创建属性委托,android,kotlin,Android,Kotlin,我有一个有工具栏的片段,我现在设置了后退按钮,如下所示: with(myToolBarView) { (activity as AppCompatActivity).setSupportActionBar(this) setNavigationOnClickListener { requireActivity().onBackPressed() } } 但是当我有其他片段时

我有一个有工具栏的片段,我现在设置了后退按钮,如下所示:

 with(myToolBarView) {
            (activity as AppCompatActivity).setSupportActionBar(this)
            setNavigationOnClickListener {
                requireActivity().onBackPressed()
            }
        }
但是当我有其他片段时,这个代码就会一直重复。所以我希望我能做这样的事情: BackButtonLegate的MyToolbar视图(此)

但问题是,视图只有在调用onCreateView之后才能准备好。因此,如果我试图在视图准备就绪之前访问它,我将得到null或一些异常。那我该怎么做呢

我尝试使用@OnLifecycleEvent(Lifecycle.Event.ON_CREATE),但我看不出这对我有什么帮助,而且我需要每次调用OnCreateView时调用代码,以防重新创建片段视图

更新:我现在[意识到片段的生命周期所有者使用片段视图生命周期][1]

以下是我到目前为止的情况:

 class BackBtnDelegate(val fragment: Fragment) {

//    operator fun getValue(thisRef: Any?, property: KProperty<*>): String {
//        return "$thisRef, thank you for delegating '${property.name}' to me!"
//    }

    init {
        fragment.lifecycle.addObserver(object : LifecycleObserver {
            @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
            fun onDestroy() {
                with(myToolBarView) { 
                    (activity as AppCompatActivity).setSupportActionBar(this)
                    setNavigationOnClickListener {
                        requireActivity().onBackPressed()
                    }
                }
            }
        })
    }

//    operator fun setValue(thisRef: Any?, property: KProperty<*>, value: String) {
//       // println("$value has been assigned to '${property.name}' in $thisRef.")
//    }
class BackBtnDelegate(val fragment:fragment){
//运算符fun getValue(thisRef:Any?,属性:KProperty):字符串{
//return“$thisRef,感谢您将“${property.name}”委托给我!”
//    }
初始化{
fragment.lifecycle.addObserver(对象:LifecycleObserver{
@onLiFeCycleeEvent(创建时的Lifecycle.Event.ON)
有趣的故事{
使用(myToolBarView){
(活动作为AppCompatActivity)。设置支持操作栏(此)
setNavigationOnClickListener{
Requiresponsibility().onBackPressed()
}
}
}
})
}
//运算符fun setValue(thisRef:Any?,属性:KProperty,值:String){
////println($value已分配给$thisRef中的“${property.name}”。)
//    }
请注意,我甚至不需要在这里设置或获取属性值,因为它们变得毫无意义,而且我仍然没有对myToolBarView的引用,所以如何才能实现这一点? [1] :

这不是工作原理。引用:

在委托中,处理请求涉及两个对象:接收对象将操作委托给其委托

您可以为
片段
类创建扩展函数:

fun Fragment.setToolbar(myToolbar:Toolbar){
使用(myToolbar){
(活动作为AppCompatActivity)。设置支持操作栏(此)
setNavigationOnClickListener{
Requiresponsibility().onBackPressed()
}
}
或者您可以在
BaseFragment
中使用公共函数,并让其他片段实现该类,但我想您已经知道了

classbasefragment:Fragment(){
...
受保护的工具栏(myToolbar:Toolbar){
使用(myToolbar){
(活动作为AppCompatActivity)。设置支持操作栏(此)
setNavigationOnClickListener{
Requiresponsibility().onBackPressed()
}
}
}
...
}

是的,可以从基类开始,但此时在组合中尽量避免这样做。委托正是我所希望的。扩展不是个坏主意