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
Runnable未在Android上的浮动操作栏上运行_Android_Kotlin - Fatal编程技术网

Runnable未在Android上的浮动操作栏上运行

Runnable未在Android上的浮动操作栏上运行,android,kotlin,Android,Kotlin,我一直试图让晶圆厂旋转并更改其图标,但由于某种原因,Runnable根本不起作用 代码如下: private val handler: Handler = Handler() private var isRotate: Boolean = false private val rotate: Animation = RotateAnimation(0.toFloat(),90.toFloat(),0.toFloat(),0.toFloat()) private val r: Runnable

我一直试图让晶圆厂旋转并更改其图标,但由于某种原因,
Runnable
根本不起作用

代码如下:

private val handler: Handler = Handler()
private var isRotate: Boolean = false
private val rotate: Animation =   RotateAnimation(0.toFloat(),90.toFloat(),0.toFloat(),0.toFloat())

private val r: Runnable = Runnable {
    fun run() {
            if (isRotate) {
                fab2.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.ic_menu_camera, null))
                isRotate = false
            } else {
                fab2.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.ic_menu_gallery, null))
                isRotate = true
            }
        }
    }

override fun onCreate(savedInstanceState: Bundle?) {

    ...

    rotate.duration = 1000
    rotate.repeatCount = 0
    rotate.repeatMode = Animation.REVERSE
    rotate.fillAfter = true

    fab2?.setOnClickListener { view ->
               ObjectAnimator.ofFloat(view,"rotation",0.toFloat(),90.toFloat()).setDuration(800).start()
    view.handler.postDelayed(r,400)
    }
}
按钮旋转,但图标不变,这意味着
OnClickListener
正在工作,而
Runnable
没有工作


如何实现这一点?

您以错误的方式声明您的
可运行。您声明的lambda表达式实际上是
run()
函数,您在其中声明了另一个
run()
函数

声明对象的正确方法应为:

private val r: Runnable = object: Runnable {
    override fun run() {
        if (isRotate) {
            fab2.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.ic_menu_camera, null))
            isRotate = false
        } else {
            fab2.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.ic_menu_gallery, null))
            isRotate = true
        }
    }
}
或(λ表达式):


如果要在单击
fab2
时强制播放动画,应使用
fab2!!。onClickListener
或使
fab2
不可为空。如果左侧表达式为
null
,安全调用操作符
将忽略以注册任何侦听器。这意味着您的
fab2
可能是
null
。正如我刚才编辑的,问题不是fab2为null,roate函数工作正常,但处理程序不工作。
private val r: Runnable = Runnable {
    if (isRotate) {
        fab2.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.ic_menu_camera, null))
        isRotate = false
    } else {
        fab2.setImageDrawable(ResourcesCompat.getDrawable(resources, R.drawable.ic_menu_gallery, null))
        isRotate = true
    }
}