마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

일주일된 초보 안린이 코딩관련 질문드려봅니다...

0 추천

4일쨰 이부분만찾아보고있는데

답이정말안나옵니다,,,

우선 스크롤뷰안에 리니어레이아웃을넣었고 그안에 이미지버튼을 넣었습니다

<ImageButton
    android:id="@+id/btn111"
    android:layout_width="30dp"
    android:onClick="onclick"
    android:layout_height="30dp"
    android:layout_marginLeft="350dp"
    android:layout_marginTop="-35dp"
    android:background="#00F6F0F0"
    android:maxWidth="35dp"
    android:maxHeight="35dp"
    android:scaleType="fitCenter"
    android:src="@drawable/loupe"

    />
 
그리고 이걸 다른화면으로 인텐트를 하기위해서 코딩을하였는데
 
class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        fun onClick(v: View) {
            findViewById<ImageButton>(R.id.btn111).setOnClickListener {
                val intent = Intent(this@MainActivity, Bookmark::class.java)
                startActivity(intent);

                finish();
            }
        }
요렇게 하였습니다 위에는 스플래쉬 뷰가있구요,,
빨간불은 안들어오고 실행도되는데 이미지버튼만 누르면 
튕깁니다,.. 이유가 뭔지알수있을까요,,,
도저히 제선에선 답이 안나옵니다ㅠㅠ...
혼자 4일동안 밤낮으로찾아보고있는데 뭐가잘못된건지 정말로 모르겠습니다,..여기 고수님들께선 바로아시지않을까
해서 여쭤봅니다ㅠㅠ 한번만 도움을 주세요,,,,
콰콰쾅 (170 포인트) 님이 2020년 11월 1일 질문

2개의 답변

0 추천
 
채택된 답변

메세지로 봐서는 님이 xml 파일에 "android:onClick"를 통해 메소드를 설정하신듯 한데요. 예를 들면, 님의 activity_main.xml 파일에

<ImageButton
    android:id="@+id/btn111"
    android:layout_width="30dp"
    android:onClick="onclick"
    android:layout_height="30dp"
    android:layout_marginLeft="350dp"
    android:layout_marginTop="-35dp"
    android:background="#00F6F0F0"
    android:maxWidth="35dp"
    android:maxHeight="35dp"
    android:scaleType="fitCenter"
    android:src="@drawable/loupe"

    />

android:onClick="onclick"

 이라고 설정이 되었있는데, MainActivity에는 onclick이란 메소드가 정의되지 있지 않아서 그런 것 같네요.

위와 같이 설정하셨다면, 아래처럼 MainActivity에 동일한 버튼클릭 이벤트가 정의되어 있어야 합니다.

public void onclick(View view) {
   // Do something
}

 

아래의 코드는 동적으로 버튼 클릭리스너를 할당해 주는 것이구요.

findViewById<ImageButton>(R.id.btn111).setOnClickListener {
                val intent = Intent(this@MainActivity, Bookmark::class.java)
                startActivity(intent);

                finish();
            }

둘다 사용하실 수는 없구요, 간단한 해결방법은 xml에서 android:onclick 부분을 지우시는 것 같아요.

spark (227,530 포인트) 님이 2020년 11월 2일 답변
콰콰쾅님이 2020년 11월 2일 채택됨
와진짜 되는거 보고 울뻔했어요... 어제 아침까지 겁나찾아보고 해봤는데도 안되서 진짜 다지우고싶었는데,ㅠㅠ 너무너무 감사합니다!!
0 추천
튕긴다는게 앱크래쉬를 말씀하시는 거죠? 혹시 로그캣에 어떤 에러메세지가 나오지는 확인해 보셨나요? 에러가 있었다면, 그에 합당하는 에러메세지가 출력될겁니다. 에러메세지를 보시면 어떤 원인으로 에러가 발생했는지 알려줍니다. 아니면, 디버거를 실행하셔서 크래쉬가 나는 구간 쪽에 브레이크 포인트를 설정하시고, 한 라인씩 어디가 문제인지 확인하시면 더 확실하구요.

먼저 안드로이드 개발자 사이트나 유투브에서 구글 IO 영상을 검색하셔서 어떻게 안드로이드 스튜디어에서 디버깅을 하는지 시간을 투자하셔서 확인해 보셔요. 아마도 디버깅은 님이 앱을 개발하시면서 수백번을 하게 될 중요한  과정입니다. 그러니 이 번에 잘 익혀두시면 생산성 향상에 큰 도움이 될 겁니다.

그리고 에러 트러블슈팅에 관한 질문은 에러로그도 같이 올려주시면, 원인을 훨씬 쉽게 찾겠죠?

혹시나 해서 그러는데, BookMark가 AndroidManifest.xml에 등록되었는지 학인해 보세요. 이게 저도 가끔 까먹고 하게되는 실수거든요.
spark (227,530 포인트) 님이 2020년 11월 1일 답변
java.lang.IllegalStateException: Could not find method onclick(View) in a parent or ancestor Context for android:onClick attribute defined on view class androidx.appcompat.widget.AppCompatImageButton with id 'btn111'
로그캣내용이 이렇게나옵니다,, 파파고에서는 메소드를 못찾는다
라고하는데 뭔가가 임포트가 안된걸까요??ㅜㅜ
이게 너무 초짜다보니까 예기를 해줘도 이해를못합니다ㅠㅠ
독학으로 공부하는 중이라 남들은 몇분만에 하는 인텐트를 5일째붙잡고 있는저를보면 참.. 답답하기만하네여...
...