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

토글버튼 상태 질문 드립니다

0 추천
오늘 날씨 넘 좋네요....이런날엔 드라이브를 가야되는데......

각설하고 질문드려봅니다

앱 실행하면 배경음악이 흘러나오구요

설정액티비티 들어가면 토글버튼2개로 배경음과 효과음이 있는데요

효과음은 디폴트값이 꺼져있는 상태로 되어있고(효과음이 아직 안나오고있으므로)  배경음은 앱 실행하면 흘러나오니 켜져있는 상태로 되어있는데요

배경음을 off로 해놓고 어플을 끄고 다시 실행시키면 on으로 되있어야할 배경음버튼이 off로 되어있더라구요;;

그리고 배경음악 나오는 상태에서 효과음버튼을 껐다켜면 배경음도 같이 꺼져버리구요

효과음버튼과 배경음버튼이 독립적으로 작동하고 배경음버튼의 상태가 on이나 off로 배경음의 상태를 따라갈수 있게 하는방법없을까요

소스입니다

 toggle = (ToggleButton) findViewById(R.id.fxsound);
  //toggle.setChecked(true);
  SharedPreferences sharedPrefs = getSharedPreferences("main", MODE_PRIVATE);
     toggle.setChecked(sharedPrefs.getBoolean("NameOfThingToSave", true));
    

  
  toggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
  {
   public void onCheckedChanged(CompoundButton buttonView,
     boolean isChecked) {
    Log.d("testaaa", isChecked + "");
    if (isChecked) {
     SharedPreferences.Editor editor = getSharedPreferences("main", MODE_PRIVATE).edit();
           editor.putBoolean("NameOfThingToSave", true);
           editor.commit();

     CMusic.getInstance().loopStart(OptActivity.this, R.raw.sb_bgm);
    } else {
     SharedPreferences.Editor editor = getSharedPreferences("main", MODE_PRIVATE).edit();
           editor.putBoolean("NameOfThingToSave", false);
           editor.commit();

     CMusic.getInstance().stop();
     
    }
   }
  });

  
  toggle2 = (ToggleButton) findViewById(R.id.bgm);
  //toggle2.setChecked(true);
  toggle2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
  {
   public void onCheckedChanged(CompoundButton buttonView,
     boolean isChecked) {
    Log.d("testbbb", isChecked + "");
    if (isChecked) {
     SharedPreferences.Editor editor = getSharedPreferences("main", MODE_PRIVATE).edit();
           editor.putBoolean("NameOfThingToSav", true);
           editor.commit();
     CMusic.getInstance().loopStart(OptActivity.this, R.raw.sb_fx);
     
    } else {
     SharedPreferences.Editor editor = getSharedPreferences("main", MODE_PRIVATE).edit();
           editor.putBoolean("NameOfThingToSav", false);
           editor.commit();
     CMusic.getInstance().stop();
     
    }
   }
  });

 

@Override
 protected void onStop() {
  // TODO Auto-generated method stub
  super.onStop();
  Log.d("testsublog", "onStop");
 }

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  // Inflate the menu; this adds items to the action bar if it is present.
  getMenuInflater().inflate(R.menu.opt, menu);
  return true;
 }

 @Override
 public void onClick(View v) {
 
 }

}
사이다중독 (270 포인트) 님이 2014년 2월 15일 질문

2개의 답변

0 추천
본인이 작성하신 소스가 맞나요?

 

딱봐도 on off 값저장하게 되어있고 해당변수를 두곳에서 같이쓰니 사운드랑뮤직이랑 같이 따라갈것같은데요?

 

소스자체에는 문제가 없습니다.. 소스 자체가 그렇게 구성되어있네요
건방진프로그래머 (26,630 포인트) 님이 2014년 2월 16일 답변
0 추천

오잉..??

 

배경음을 off로 해놓고 어플을 끄고 다시 실행시키면 on으로 되있어야할 배경음버튼이 off로 되어있더라구요;;

왜 on 으로 되있어야한다고 생각하시는지..? 모르겠네요.

toggle.setChecked(sharedPrefs.getBoolean("NameOfThingToSave", true));

혹시 이 부분 때문에 저기에 true 가 들어간다고 생각하시는 건 아닌가싶네요. 그렇다면 셰프에 대해 다시 공부하세요~

저 뒤에 true 는 단지 앞의 문자열키값에 값이 없을 경우 디폴트 값으로 되는건데

중독님이 배경음오프시

editor.putBoolean("NameOfThingToSave", false);
           editor.commit();
false 값을 대입하셨으니까 당연히 false 가 되어 재시작시 배경음버튼이 off 상태이지요~

 

그리고 배경음악 나오는 상태에서 효과음버튼을 껐다켜면 배경음도 같이 꺼져버리구요

이 부분 관련해서는 자세히 나와있진않지만 건방진프로그래머님 말씀대로

CMusic 이란 녀석이 하나뿐인데 그걸로 두 곳에서 사용하니까 그런거에요

배경음버튼에도

CMusic.getInstance().loopStart(OptActivity.this, R.raw.sb_fx);

CMusic.getInstance().stop();

효과음버튼에도

CMusic.getInstance().loopStart(OptActivity.this, R.raw.sb_fx);

CMusic.getInstance().stop();
 

CMusic 을 두녀석으로 만들어서 각각 매칭시켜주면 될것 같아요~?

초보개발자ㅠ (33,870 포인트) 님이 2014년 2월 17일 답변
매번 감사드립니다(__)
...