2013-08-14 5 views
0

녹음 버튼과 토글 버튼이있는 앱을 만들고 있습니다. 녹음 버튼은 소리 녹음을 시작하고 토글 버튼은 녹음 버튼이 녹음을 위해 HELD인지 한 번만 눌러야 하는지를 선언합니다.ToggleButton onCheckChangeListener

touchToRecord.setOnCheckedChangeListener(new OnCheckedChangeListener(){ 

     @Override 
     public void onCheckedChanged(CompoundButton buttonView, 
       boolean isChecked) { 
      saveCheckedState("touchToRecord", isChecked); 

      if (isChecked) 
      { 
       recBtn.setOnTouchListener(new OnTouchListener(){ 

        @Override 
        public boolean onTouch(View v, MotionEvent event) { 

         if (event.getAction() == MotionEvent.ACTION_DOWN) 
         { 
          recBtn.setImageResource(com.whizzappseasyvoicenotepad.R.drawable.record_btn_pressed); 
          chTimer.setBase(SystemClock.elapsedRealtime()); 
          chTimer.setText("00:00:00"); 
          chTimer.start(); 
          chTimer.setTextColor(Color.GREEN); 
          startRecording(); 
         } 
         else if (event.getAction() == MotionEvent.ACTION_UP) 
         { 
          recBtn.setImageResource(com.whizzappseasyvoicenotepad.R.drawable.record_btn); 
          chTimer.stop(); 
          chTimer.setBase(SystemClock.elapsedRealtime()); 
          chTimer.setText("00:00:00"); 
          chTimer.setTextColor(Color.GRAY); 
          stopRecording(); 
          nameAlert(); 
         } 
         return true; 
        } 
       }); 
      } 
      else if (isChecked == false) 
      { 

      } 

당신이 볼 수 있듯이, 토글 버튼은 'ON'또는 레코드 버튼을, 기록에 아래로 개최하고있다 '확인'하고 경우에 당신이 할 때 OG : 이것은 내가 그것을 달성하기 위해 노력하고있어 어떻게 버튼을 누르면 녹음이 중지됩니다. 이제는 작동하지만 단 하나의 결함 만 있습니다. isChecked 상태를 sharedpreferences에 저장하고 있으므로 토글 버튼을 '켜기'로 설정 한 다음 앱을 다시 시작하면 토글 버튼이 '켜기'상태로 유지되지만 다시 켜고 다시 작동시켜야합니다. 따라서 앱을 다시 시작하면 여전히 '켜져'있지만 작동하지 않습니다.

또한 볼 수 있듯이 토글 버튼이 false 인 경우 코드를 작성하지 않았습니다. 지금

내 코드 :

if (touchToRecord.isChecked() == true) 
    { 
     recBtn.setOnTouchListener(new OnTouchListener(){ 

      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       if (event.getAction() == MotionEvent.ACTION_DOWN) 
       { 
        recBtn.setImageResource(com.whizzappseasyvoicenotepad.R.drawable.record_btn_pressed); 
        startTimer(); 
        startRecording(); 
       } 
       else if (event.getAction() == MotionEvent.ACTION_UP) 
       { 
        recBtn.setImageResource(com.whizzappseasyvoicenotepad.R.drawable.record_btn); 
        stopTimer(); 
        stopRecording(); 
        nameAlert(); 
       } 
      return true; 
      } 
     }); 
    } 

    if (touchToRecord.isChecked() == false) 
    { 
     recBtn.setOnClickListener(new OnClickListener(){ 

      @Override 
      public void onClick(View arg0) { 
       if (recorder == null) 
       { 
        recBtn.setImageResource(com.whizzappseasyvoicenotepad.R.drawable.record_btn_pressed); 
        startTimer(); 
        startRecording(); 
       } 
       else if (recorder != null) 
       { 
        recBtn.setImageResource(com.whizzappseasyvoicenotepad.R.drawable.record_btn); 
        stopTimer(); 
        stopRecording(); 
        nameAlert(); 
       } 
      } 
     }); 
    } 

OnCheckedChangeListener :

touchToRecord.setOnCheckedChangeListener(new OnCheckedChangeListener(){ 

     @Override 
     public void onCheckedChanged(CompoundButton buttonView, 
       boolean isChecked) { 
      saveCheckedState("touchToRecord", isChecked); 
     } 
    }); 

공유 환경 설정에서 상태 ToggleButton을 받기는 :

touchToRecord.setChecked(getCheckedState("touchToRecord")); 
+1

공유 환경 설정에서 '확인 됨'상태를 저장하는 이유는 무엇입니까? – Namenlos

+0

@ Namenlos 앱이 설정을 기억하기를 원하기 때문에 사용자가 앱을 열 때마다 변경할 필요가 없기 때문입니다. 거기에 문제가 있습니까? – Guy

+0

아니요, 괜찮습니다. 내가 틀렸어 .-) – Namenlos

답변

2

그것은 당신의 논리에 관한 것입니다. onCheckedChangeListener입니다. 즉, 사용자가 Toggle Button을 변경하면 또는 이 표시되지 않습니다.으로 바뀝니다. 따라서 앱을 종료하고 다시 시작하면 Toggle Button에 변경 사항이 없으므로 작동하지 않습니다.

onTouchListeneronCheckedChangeListener 외부에 넣으십시오. 이 오프 또는 이며, 당신의 작업을 수행 할 경우 onCheckedChangeListener에서 당신의 상태 ( 오프 또는 )와 onTouchListener 체크 내부를 설정합니다.

+0

대단히 고마워! 이것은 내가 필요로했던 것과 정확히 같은 종류의 대답이었습니다. 제 논리에 문제가 있다는 것을 알았지 만, 제 손가락을 가리킬 수 없었습니다. 그래도 한가지 더요, 그 안에 모두 다해야합니까? – Guy

+0

어쩌면 당신은 커피 브레이크를 잊지 :) 나는 항상 거기에 넣어, 그래서 괜찮을 것입니다. 나중에 참조 할 수 있도록 답변을 수락했음을 잊지 마십시오. –

+0

한 가지만 더 : onCreate 내부에서 if 문을 만들 수 있습니까? 예 : 토글 버튼이 선택되면 ontouchlistener를 구현하고, 그렇지 않으면 togglebutton을 선택 취소 한 다음 onclicklistener를 구현합니다. 지금부터는 dboth onclicklistener와 ontouchlistener를 구현 한 다음 그 안에 if 문을 작성 했으므로 의도 한대로 작동하지 않습니다. – Guy