Switch SharedPreference 에 대한 질문입니다.
조회수 850회
Switch _Gain_Switch = (Switch)_Adjust_Popup.FindViewById(Resource.Id._Gain_Switch);
SeekBar _Gain_SeekBar = (SeekBar)_Adjust_Popup.FindViewById(Resource.Id._Gain_SeekBar);
TextView _Gain_SeekBar_Text = (TextView)_Adjust_Popup.FindViewById(Resource.Id._Gain_SeekBar_Text);
_Gain_SeekBar.Enabled = _Saved_Data.GetBoolean("_Test_SSS", true);
_Gain_Switch.Checked = _Saved_Data.GetBoolean("_Test_SSS", true);
_Gain_SeekBar.Progress = _Saved_Data.GetInt("_Test_Pro", 0);
_Gain_SeekBar_Text.Text = "" + _Saved_Data.GetInt("_Test_Pro", 0);
_Gain_Switch.CheckedChange += (a, b) =>
{
if (b.IsChecked == true)
{
_Gain_SeekBar.Enabled = true;
_Data_Edit.PutBoolean("_Test_SSS", true);
_Data_Edit.Apply();
_Gain_SeekBar.Progress = _Saved_Data.GetInt("_Test_Pro", 0);
_Gain_SeekBar_Text.Text = "" + _Saved_Data.GetInt("_Test_Pro", 0);
_Gain_SeekBar.ProgressChanged += (c, d) =>
{
_Gain_SeekBar_Text.Text = string.Format("" + d.Progress);
_Data_Edit.PutInt("_Test_Pro", d.Progress);
_Data_Edit.Apply();
};
}
else if (b.IsChecked == false)
{
Toast.MakeText(this, "Auto 를 선택하셨습니다", ToastLength.Short).Show();
_Gain_SeekBar.Enabled = false;
_Gain_SeekBar_Text.Enabled = false;
_Data_Edit.PutBoolean("_Test_SSS", false);
_Data_Edit.Apply();
}
};
현재 이런 상황입니다. 제가 질문드리고 싶은건, Switch 현 상태를 저장해서 불러오는 것은 알겠습니다만, Switch 내부에 데이터까지 한번에 저장해서 불러오는 방법은 없나요?
예를 들어, Switch = true 상태를 Shared에 저장해서 재실행 했을 때도 true를 불러오면, true 안에서 실행되는 TextView의 수정이라던가 SeekBar의 표현이라던가를 같이 불러오는 방법은 없나요?
잘 이해가 안가신다고 하여, 내용을 추가하겠습니다.
현재는 Switch문 밖에
if (_Saved_Data.GetBoolean("_Test_SSS", true) == true)
{
_Gain_SeekBar.Progress = _Saved_Data.GetInt("_Test_Pro", 0);
_Gain_SeekBar_Text.Text = "" + _Saved_Data.GetInt("_Test_Pro", 0);
}
else if(_Saved_Data.GetBoolean("_Test_SSS", true) == false)
{
_Gain_SeekBar.Enabled = false;
_Gain_SeekBar_Text.Enabled = false;
}
이 문장을 추가하여 True가 저장되었을 때와 False가 저장되었을 때 각각 이벤트를 정해주었습니다.
좀 더 구체적으로 예를 들자면
위에 문장처럼
"_Test_SSS" 이라는 Key값에 Switch의 true 상태가 저장되어 있다면 재부팅했을 때 Switch가 true 상태로 유지되잖아요? 그런데 true 상태 일 때 나타내야하는 TextView 라거나 하는 것들은 전혀 동작이 없습니다.
이걸 이 이상 어찌 설명해야하는지를 모르겠네요 ㅠㅠ
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
Seekbar 를 disable 시켰을떄 안보이는것 같은 현상은 앱 테마마다 컨셉이 다르긴 하지만 아마도 옅은 회색으로 비활성화 되서 안보이는 것처럼 보이시는것 같습니다. 저도 테스트해보면 progress 0 인 상태에선 티가 잘 안나더라구요. 코드를 간략화 하는건 도움을 구하시는것 보다는 계속 해보는것 밖에는 답이 없다고 생각해요. 사람마다 코딩스타일이 다르고 뭐가 정답이다 단정짓기 애매한 부분도 있구요..
일단 자바로 짜봤는데 흐름만 참고하시길 바랍니다.
public class TestLayoutActivity extends AppCompatActivity { private final static String KEY_SEEKBAR_VALUE = "seekbar_value"; private final static String KEY_SWITCH_VALUE = "switch_value"; private SeekBar mSeekBar; private Switch mSwitch; private TextView mTextView; @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.test_layout); mSeekBar = findViewById(R.id.seekBar); mSwitch = findViewById(R.id.testSwitch); mTextView = findViewById(R.id.textView); final boolean checkedVlaue = getSwitchValue(); mSwitch.setChecked(checkedVlaue); updateVisibleState(checkedVlaue); final int progressValue = getSeekbarValue(); mSeekBar.setProgress(progressValue); mTextView.setText(String.valueOf(progressValue)); mSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { updateVisibleState(isChecked); } }); mSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { mTextView.setText(String.valueOf(progress)); } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } }); } private void updateVisibleState(boolean isChecked) { mSeekBar.setEnabled(isChecked); mTextView.setVisibility(isChecked ? View.VISIBLE : View.GONE); } @Override protected void onPause() { super.onPause(); saveSeekbarValue(mSeekBar.getProgress()); saveSwitchValue(mSwitch.isChecked()); } private void saveSeekbarValue(int value) { final SharedPreferences.Editor prefs = PreferenceManager.getDefaultSharedPreferences(this).edit(); prefs.putInt(KEY_SEEKBAR_VALUE, value); prefs.apply(); } private int getSeekbarValue() { return PreferenceManager.getDefaultSharedPreferences(this).getInt(KEY_SEEKBAR_VALUE, 0); } private void saveSwitchValue(boolean value) { final SharedPreferences.Editor prefs = PreferenceManager.getDefaultSharedPreferences(this).edit(); prefs.putBoolean(KEY_SWITCH_VALUE, value); prefs.apply(); } private boolean getSwitchValue() { return PreferenceManager.getDefaultSharedPreferences(this).getBoolean(KEY_SWITCH_VALUE, false); } }
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력