Позволяет пользователю изменять экран по умолчанию

#android

#Android

Вопрос:

Мое приложение позволяет пользователю выбирать экран по умолчанию при каждом запуске приложения, и для этого я использую SharedPreferences. Приложение предложит им выбрать экран при первом запуске после установки, и эта часть работает. Однако внутри приложения, где оно позволяет пользователю изменять экран по умолчанию, я использую тот же код, и он никогда не сохраняет изменения. Что мне нужно изменить, чтобы он правильно сохранялся?

             AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Choose a Default Screen");
        builder.setItems(R.array.openChoices, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int item) {
                SharedPreferences settings = getPreferences(0);
                SharedPreferences.Editor editor = settings.edit();
                editor.putInt("start", item);
                editor.commit();
                //Mech = 0, Eamp;M = 1
                int choice = getPreferences(0).getInt("start", 3);
                if(choice == 0){
                    Toast.makeText(setscreen.this, "Mechanics is now the default screen", Toast.LENGTH_SHORT).show();
                    Intent myIntent = new Intent(setscreen.this, physics.class);
                    startActivity(myIntent);             
                }
                else if(choice == 1){
                    Toast.makeText(setscreen.this, "Eamp;M is now the default screen", Toast.LENGTH_SHORT).show();
                    Intent myIntent = new Intent(setscreen.this, physicsem.class);
                    startActivity(myIntent);
                }
            }
        });
  

Комментарии:

1. Вы пробовали вызывать editor.apply()?

2. разве editor.commit() не должен делать то же самое?

3. Да, в документах говорится, что они делают то же самое, я просто сказал, что стоит попробовать :).

4. Да, я попробую. Может быть, commit() делает значение постоянным, поэтому оно не перезаписывается при последующем изменении?

Ответ №1:

Попробуйте использовать что-то подобное, чтобы получить ссылку на ваш объект общих настроек:

 myPrefs = PreferenceManager.getDefaultSharedPreferences(ScreenSaverActivity.this);
  

Я не уверен, что то, как вы это сделали, не сработает, но я никогда не видел, чтобы это делалось таким образом, просто передавая 0.

Ответ №2:

И вы уверены, что звоните editor.commit(); каждый раз?