Android ImageButton OnTouchListener无法正常工作

时间:2017-11-07 03:24:15

标签: android ontouchlistener android-imagebutton

好的,我身上发生了一件奇怪的事。 我有一个名为tab_but的ImageButton来自其他布局我导入并设置onTouchListener正在工作。

package com.xx

导入kotlinx.android.synthetic.main.tab_btn_layout。*

导入kotlinx.android.synthetic.main.btnNext_layout。*

    class EventDetails : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_event_details)

        tab_btn.setOnTouchListener(object  : View.OnTouchListener {
            override fun onTouch(view: View?, event: MotionEvent?): Boolean {
                if (event!!.action ==  MotionEvent.ACTION_DOWN) {
                    val icon: Drawable = ContextCompat.getDrawable(applicationContext, R.drawable.talk_bt_tab)
                    icon.setColorFilter(Color.GRAY,PorterDuff.Mode.MULTIPLY)
                    tab_btn.setImageDrawable(icon)
                }else if (event!!.action ==  MotionEvent.ACTION_UP) {
                    tab_btn.clearColorFilter()
                }

                return true
            }
        })

        btnNext.setOnTouchListener(object : View.OnTouchListener {
            override fun onTouch(p0: View?, ev: MotionEvent?): Boolean {
                if (ev!!.action == MotionEvent.ACTION_DOWN){
                    val icon: Drawable = ContextCompat.getDrawable(applicationContext, R.drawable.layer_bt_next)
                    icon.setColorFilter(Color.GRAY,PorterDuff.Mode.MULTIPLY)
                    btnNext.setImageDrawable(icon)
                }else if(ev!!.action == MotionEvent.ACTION_UP){
                    btnNext.clearColorFilter()
                }

                return true
            }
        })
    }
}

以下,我有另一个名为btnNext的布局的ImageButton。我在它上面设置了相同的OnTouchListener。但它给了我错误。

btnNext给了我错误:

尝试在空对象引用上调用虚方法'void android.widget.ImageButton.setOnTouchListener(android.view.View $ OnTouchListener)'

注意:我已导入了Image按钮的两个布局。 tab_btn正在运行,但btnNext无效。

1 个答案:

答案 0 :(得分:0)

好的,我解决了自己的问题。

真正的嫌疑人是我的btnNext在片段(viewpager)中,我必须首先在oncreateview方法中对rootview进行膨胀。

注意:如果不对其进行充气,则无法访问该片段的元素。

这是ma代码:

override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View {
    val rootView = inflater!!.inflate(R.layout.btnNext_layout, container, false)

    var next : ImageButton = rootView.findViewById(R.id.btnNext)
    next.setOnTouchListener(object : View.OnTouchListener {
        override fun onTouch(p0: View?, ev: MotionEvent?): Boolean {
            if (ev!!.action == MotionEvent.ACTION_DOWN){
                val icon: Drawable = ContextCompat.getDrawable(activity.applicationContext, R.drawable.layer_bt_next)
                icon.setColorFilter(Color.GRAY, PorterDuff.Mode.MULTIPLY)
                btn_next.setImageDrawable(icon)
            }else if (ev!!.action == MotionEvent.ACTION_UP){
                val icon: Drawable = ContextCompat.getDrawable(activity.applicationContext, R.drawable.layer_bt_next)
                icon.setColorFilter(Color.WHITE, PorterDuff.Mode.MULTIPLY)
                btn_next.setImageDrawable(icon)
            }

            return true
        }
    })
}