0

我正在制作一个应用程序,用户可以在其中启用/禁用手机的振动。为此,我放了一个开关。这是我的代码:

    public class settings extends Activity {


        public static boolean vibrationOnOff;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_settings);

            final Switch tButton = (Switch) findViewById(R.id.vibration);

            tButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

                @Override
                public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
                    if(isChecked){
                        tButton.setChecked(true);
                        vibrationOnOff = true;
                    }else{

                        tButton.setChecked(false);
                        vibrationOnOff = false;
                    }

                }
            });

        }
}

我的问题:每次我开始这个活动时,开关按钮总是 isChecked()/总是打开。当我取消选中开关并返回另一个活动并再次打开设置活动时,它再次被选中。

我该如何解决这个问题?

这是一个类似的问题,但它没有解决我的问题:Android ToggleButton always check

4

2 回答 2

0

您可以执行以下操作;

public class MainActivity extends Activity {
    private AudioManager mAudioManager;
    private boolean mPhoneIsSilent;

    @Override public void onCreate(Bundle savedInstanceState){
     super.onCreate(savedInstanceState);
     setContentView(R.layout.main);
     mAudioManager = (AudioManager)getSystemService(AUDIO_SERVICE);  
     checkIfPhoneIsSilent();
     setButtonClickListener();
}

    private void setButtonClickListener() {
    Button toggleButton = (Button)findViewById(R.id.toggleButton);    
    toggleButton.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) {
        if (mPhoneIsSilent) { 
        // Change back to normal mode mAudioManager   
        .setRingerMode(AudioManager.RINGER_MODE_NORMAL); mPhoneIsSilent = false; 
        } else { 
        // Change to silent mode mAudioManager  
        .setRingerMode(AudioManager.RINGER_MODE_SILENT); mPhoneIsSilent = true; 
}
// Now toggle the UI again 
toggleUi(); 
        } 
    }); 
}

// Checks to see if the phone is currently in silent mode.

private void checkIfPhoneIsSilent() { 
    int ringerMode = mAudioManager.getRingerMode();
    if (ringerMode == AudioManager.RINGER_MODE_SILENT) { 
    mPhoneIsSilent = true; 
       } else { 
    mPhoneIsSilent = false; 
    } 
}

//Toggles the UI images from silent to normal and vice versa.

private void toggleUi() {
    ImageView imageView = (ImageView) findViewById(R.id.phone_icon);
    Drawable newPhoneImage;
    if (mPhoneIsSilent) {
    newPhoneImage = getResources().getDrawable(R.drawable.phone_silent);
    } else {
    newPhoneImage = getResources().getDrawable(R.drawable.phone_on); } 
    imageView.setImageDrawable(newPhoneImage);
}       
    @Override protected void onResume() {
    super.onResume();
    checkIfPhoneIsSilent(); 
    toggleUi(); 
}
于 2014-12-12T17:27:12.103 回答
0

首先,您必须确定手机的当前状态。因此,如果手机处于振动模式,请保持开关处于选中状态,否则不要选中。

要确定电话状态,

boolean isVibrateOn = false;
AudioManager mAudioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
int ringerMode = mAudioManager.getRingerMode();
if(ringerMode == AudioManager.RINGER_MODE_VIBRATE)
    isVibrateOn = true;
else
    isVibrateOn = false;

然后适当设置开关的状态,

final Switch tButton = (Switch) findViewById(R.id.vibration);
tButton.setChecked(isVibrateOn);

tButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
       @Override
       public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
           if(isChecked){
               tButton.setChecked(true);
               vibrationOnOff = true;
           }else{
               tButton.setChecked(false);
               vibrationOnOff = false;
           }

       }
 });

希望这能解决您的问题。;) :)

于 2014-12-12T17:45:18.253 回答