2017-11-07 1 views
0

좋아, 이상한 일이 저에게 일어나고 있습니다. 나는 가져오고 작동중인 onTouchListener를 설정 한 다른 레이아웃의 tab_btn이라는 ImageButton을 가지고 있습니다.Android ImageButton OnTouchListener가 작동하지 않습니다.

패키지 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 나에게 오류 제공 : 널 객체 참조에

메모를 가상 메서드를 호출하는

시도 '무효 android.widget.ImageButton.setOnTouchListener (android.view.View에서 $ OnTouchListener를)': I 이미지 버튼의 레이아웃을 모두 가져 왔습니다. tab_btn이 작동하지만 btnNext가 작동하지 않습니다.

+0

당신이 btnNext 버튼을 초기화 한? –

+0

@OmInfowaveDevelopers 예. 시도해 보았습니다. 하지만 kotlin에서는 초기화 할 필요가 없습니다. 나는 kotlinx 합성물의 사용으로 그것의 레이아웃을 수입했다. btw tab_btn은 가져온 상태로 초기화되지 않았지만 작동 중입니다. – lambda

+2

전체 코드를 게시하십시오 – RRTW

답변

0

좋아, 나는 내 자신의 문제를 해결했다.

진짜 용의자는 내 btnNext가 oncreateview 메소드에서 rootview를 먼저 팽창시켜야하는 조각 (viewpager)에 있다는 것입니다.

참고 : 조각을 부 풀리지 않고 요소에 액세스 할 수는 없습니다.

여기에 엄마의 코드는 다음과 같습니다

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 
     } 
    }) 
} 
관련 문제