안드로이드 could not find method xxx in a parent or ancestor Context for android:onClick attribute

프로그래밍/Android 관련2018. 2. 24. 00:16

안녕하세요. 개발자 드리머즈입니다.



java.lang.IllegalStateException: Could not find method onRadioButtonClicked(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.support.v7.widget.AppCompatRadioButton with id 'rb_income'


코딩을 하다가 위의 에러를 만났습니다. 원래는 Activity에서 잘 동작하던 코드와 레이아웃을 Fragment 형태로 변경하니 발생했습니다.

위 에러가 의미하는 것은 레이아웃 xml에서 특정 view가 클릭되면 불릴 함수를 설정하는 attribute인 android:onClick에 설정된 함수를 부모나 조상 클래스에서 찾을 수 없다는 말입니다.

제 경우에는 특정 뷰가 클릭되면 제가 만든 onRadioButtonClicked(View)라는 함수가 불리도록 설정을 해놨고 이 함수는 Fragment에 정의된 상태였습니다. 그러나 스택오버플로우에서 찾아보니 Fragment에 그 함수(android:onClicked에 해당하는 함수)를 정의하면 안된다고 합니다.


https://stackoverflow.com/questions/21192386/android-fragment-onclick-button-method


해결책은 2가지가 될 수 있겠습니다.

  1. 그 함수를 Activity에 정의함
  2. 레이아웃에서 android:onClicked attribute가 아닌 코드에서 setOnClickLIstener를 통해 뷰가 클릭되면 할 동작을 설정함

개인적인 생각으로는 2번의 방법이 좋은 것 같습니다. 왜냐하면 1번 방법을 사용하면 Activity보다 Fragment에 더 관련된 코드를 Activity에 넣어야하기 때문입니다.


1
2
3
4
5
6
view.setOnClickListener(new View.OnClickListener(){
    @Override
     public void onClick(View view) {
        //write your code here
    }
});
cs

작성자

Posted by 드리머즈

관련 글

댓글 영역