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

에러에 대한 질문입니다

0 추천

버튼을 클릭을 하니까 다음과 같이 에러가 출력이 되었습니다

java.lang.IllegalStateException: Could not find method right_btn(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.support.v7.widget.AppCompatButton with id 'right_btn'
        at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.resolveMethod(AppCompatViewInflater.java:423)
        at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:380)
        at android.view.View.performClick(View.java:6897)
        at android.widget.TextView.performClick(TextView.java:12693)
        at android.view.View$PerformClick.run(View.java:26100)
        at android.os.Handler.handleCallback(Handler.java:789)
        at android.os.Handler.dispatchMessage(Handler.java:98)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6944)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)

fragment에서 다음과 같이 작성을 하였습니다.

 

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View RootView = inflater.inflate(R.layout.content_main, container, false);
    // onCreateView = Layout을 inflater하여 View작업을 하는 곳
    final ArcSeekBar arcSeekBar = (ArcSeekBar)RootView.findViewById(R.id.seekArc);
    mhztext = (TextView)RootView.findViewById(R.id.hztext);
    mtimebar = (TextView)RootView.findViewById(R.id.timebar);
    mtimerbar = (ProgressBar) RootView.findViewById(R.id.timerbar);

    mBtn1 = (Button)getView().findViewById(R.id.btn1);
    mBtn2 = (Button)getView().findViewById(R.id.btn2);
    mBtn3 = (Button)getView().findViewById(R.id.btn3);
    mBtn4 = (Button)getView().findViewById(R.id.btn4);
    mmdBtn2 = (Button)getView().findViewById(R.id.mdbtn2);
    mmdBtn3 = (Button)getView().findViewById(R.id.mdbtn3);
    mstartbtn = (Button)getView().findViewById(R.id.startbtn);
    mleft_btn = (Button)getView().findViewById(R.id.left_btn);
    mright_btn = (Button)getView().findViewById(R.id.right_btn);
    mhz_left=(Button)getView().findViewById(R.id.hz_left);
    mhz_right=(Button)getView().findViewById(R.id.hz_right);

    mBtnSend.setOnClickListener(this);
    mBtn1.setOnClickListener(this);
    mBtn2.setOnClickListener(this);
    mBtn3.setOnClickListener(this);
    mBtn4.setOnClickListener(this);
    mmdBtn2.setOnClickListener(this);
    mmdBtn3.setOnClickListener(this);
    mstartbtn.setOnClickListener(this);
    mleft_btn.setOnClickListener(this);
    mright_btn.setOnClickListener(this);
    mhz_left.setOnClickListener(this);
    mhz_right.setOnClickListener(this);

    arcSeekBar.setProgress(0);
    mhztext.setText("");

    return RootView;
}
@Override
public void onClick(View v) {switch(v.getId()) {
    // 추가 부분 버튼 클릭시 해당되는 값 전송
    //  수평 모드
    // 약 진동
    case R.id.btn1:
        message = "h01";
        if(message != null && message.length() > 0)
            sendMessage(message);
        break;
    // 강 진동
    case R.id.btn2:
        message = "h02";
        if(message != null && message.length() > 0)
            sendMessage(message);
        break;
    // 약 + 강 진동
    case R.id.btn3:
        message = "h03";
        if(message != null && message.length() > 0)
            sendMessage(message);
        break;

    //  수직 모드
    //  00(시간)만큼 수평모터 작동 후 다시 나옴
    case R.id.mdbtn2:
        message = "s";
        if(message != null && message.length() > 0)



            sendMessage(message);
        break;

    //  엑츄레이터 양쪽으로 번갈아가면서 나옴
    case R.id.mdbtn3:
        message = "s";
        if(message != null && message.length() > 0)
            sendMessage(message);
        break;

    // 동작 버튼
    case R.id.startbtn:
        message = "s";
        if(message != null && message.length() > 0)
            sendMessage(message);
        break;
    // 시간 -10초
    case R.id.left_btn:
        count-=10;
        mtimebar.setText(""+count);
        break;
    // 시간 +10초
    case R.id.right_btn:
        count+=10;
        mtimebar.setText(""+count);
        break;
    // Hz -1
    case R.id.hz_left:
        count--;
        mhztext.setText(""+count);
        break;
    // Hz +1
    case R.id.hz_right:
        count++;
        mhztext.setText(""+count);
        break;

}

 

 

익명사용자 님이 2018년 9월 13일 질문
2018년 9월 13일 수정

1개의 답변

0 추천
(Button)getView().findViewById(R.id.btn1);
 
이 부분을
(Button)RootView.findViewById(R.id.btn1);
 
로 바꾸셔야겠네요.
버튼쪽은 전부 잘못되있는듯.
개발자초심 (21,220 포인트) 님이 2018년 9월 13일 답변
...