Я пишу приложение, в котором я должен сохранить состояние активности. У меня вопрос и несколько кнопок в действии. Когда пользователь нажимает на правильный ответ, все события происходят одновременно.Сохраните состояние активности с SharedPreferences
1.The телефон вибрирует.
2. Появляется изображение.
3. Кнопки становятся отключенными.
Мне нравится сохранять изображение и статус кнопок, но когда я нажимаю на кнопку «Назад» и снова открываю действие, все идет, и я должен начинать с самого начала. Я использую SharedPrefernces, чтобы сохранить их, но он не работает. Я создал логический тип, который является ложным в начале. Когда пользователь выбирает правильный ответ, логическое значение становится истинным, а если оно истинно, события происходят. Я сохраняю этот истинный статус в методе onStop, и я использую Toast, который показывает мне состояние булева. Когда я выбираю правильный ответ, Toast показывает «true», и когда я снова открываю действие, он показывает «false». Очевидно, что попытка сохранить «истинный» статус плоха, но я использую правильный тип хранилища, чтобы сохранить изображение и статус кнопок? Так что я боюсь, чтобы сохранить статус с SharedPreferences.
Если у кого-то есть идея, как это сделать, ответьте! :)
скопировать мой код:
private static final String KEYFIRST = "KEYFIRST";
private static final String DB_INIT = "DB_INIT";
String requested_word = "gol";
final Button buttons[] = new Button[3];
final Button betu[] = new Button[3];
final String[] letters = new String[3];
final int[] arr = new int[3];
boolean done = false;
ImageView imageview2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("TEST2", "CREATE3");
}
@Override
protected void onStart() {
super.onStart();
Log.d("TEST2", "STRAT3");
SharedPreferences sp = getSharedPreferences(DB_INIT, MODE_PRIVATE);
Boolean state = sp.getBoolean(KEYFIRST, done);
Toast.makeText(getApplicationContext(), ""+done, Toast.LENGTH_LONG).show();
}
@Override
protected void onResume() {
buttons[0] = (Button) findViewById(R.id.valaszelso);
buttons[1] = (Button) findViewById(R.id.valaszmasodik);
buttons[2] = (Button) findViewById(R.id.valaszharmadik);
betu[0] = (Button) findViewById(R.id.elso);
betu[1] = (Button) findViewById(R.id.masodik);
betu[2] = (Button) findViewById(R.id.harmadik);
letters[0] = betu[0].getText().toString();
letters[1] = betu[1].getText().toString();
letters[2] = betu[2].getText().toString();
imageview2 = (ImageView) findViewById(R.id.imageview2);
for (int i = 0; i < 3; i++) {
arr[i] = 0;
}
betu[0].setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
for (int i = 0; i < 3; i++) {
if (arr[i] == 0) {
arr[i] = 1;
buttons[i].setText(betu[0].getText().toString());
betu[0].setVisibility(View.INVISIBLE);
break;
}
}
}
});
betu[1].setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
for (int i = 0; i < 3; i++) {
if (arr[i] == 0) {
arr[i] = 1;
buttons[i].setText(betu[1].getText().toString());
betu[1].setVisibility(View.INVISIBLE);
break;
}
}
}
});
betu[2].setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
for (int i = 0; i < 3; i++) {
if (arr[i] == 0) {
arr[i] = 1;
buttons[i].setText(betu[2].getText().toString());
betu[2].setVisibility(View.INVISIBLE);
break;
}
if (arr[3 - 1] == 1) {
test();
}
}
}
private void test() {
String word = "";
for (int i = 0; i < 3; i++) {
word += buttons[i].getText().toString();
}
if (word.equals(requested_word)) {
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
v.vibrate(500);
done = true;
Log.d("TEST2","set true");
if(done == true){
for (int j = 0; j < 3; j++) {
buttons[j].setEnabled(false);
betu[j].setEnabled(false);
imageview2.setVisibility(View.VISIBLE);
}
Toast.makeText(getApplicationContext(), ""+done, Toast.LENGTH_LONG).show();
}
}
}
});
super.onResume();
Log.d("TEST2", "RESUME3");
}
@Override
protected void onStop() {
super.onStop();
SharedPreferences sp = getSharedPreferences(DB_INIT, MODE_PRIVATE);
Editor et = sp.edit();
et.putBoolean(KEYFIRST, done);
et.commit();
if(done == true){
Log.d("TEST2","true saved");
}
Log.d("TEST2", "STOP3");
}
}
Спасибо за ваш ответ! К сожалению, ваш код для меня не работает.То же самое, когда ответ в порядке, тост показывает мне правду, и когда я снова его открываю, логическое значение false, и изображение исчезло. Можете ли вы сказать мне, почему вы предпочитаете SqliteDB? Я прочитал, что он используется для данных структуры. –
ОК, почему не работает, это дает вам некоторую ошибку? если он, вы могли бы поделиться своим логарифмом, чтобы проверить, код, которым я пользуюсь, я использую в некоторых проектах и работает, поэтому давайте посмотрим, почему не –
Проверьте это решение тоже: http://stackoverflow.com/questions/151777/saving- activity-state-in-android –