SharedPreferences сохранить изменения размера текста в текстовом представлении - PullRequest
0 голосов
/ 03 ноября 2019

У меня проблема с SharedPreferences, есть AlertDialog с 3 размерами текста по умолчанию. Когда я нажимаю на один из трех размеров, текст в TextView аккуратно увеличивается или уменьшается, но мне нужно сохранить выбранный размер в SharedPreferences даже после того, как я покину приложение и вернусь в приложение снова. Можете ли вы помочь мне, где я не прав в моем коде? Спасибо.

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


    button =(Button)findViewById(R.id.button);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            CreateAlertDialogWhitRadioGroupButton();
        }

    });


}

public void CreateAlertDialogWhitRadioGroupButton() {

    Context context;
    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
    builder.setTitle("Title text");
    textView = (TextView)findViewById(R.id.textView1);
    builder.setSingleChoiceItems(values, -1, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int item) {

                    SavePreferences("SIZE", textView.toString());
                    LoadPreferences();

            switch (item) {
                case 0:
                    textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20);
                    break;
                case 1:
                    textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 30);
                    break;
                case 2:
                    textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 40);
                    break;
            }
            alertDialogTextSize.dismiss();
        }
    });
    alertDialogTextSize = builder.create();
    alertDialogTextSize.show();
}


// SharedPreferences
private void SavePreferences(String key, String value){
    SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putString(key, value);
    editor.apply();
}

private void LoadPreferences()
{
    SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
    String textsize = sharedPreferences.getString("SIZE", "");
    textView.setTextSize(Float.parseFloat(textsize));

}

введите описание изображения здесь

Ответы [ 2 ]

0 голосов
/ 03 ноября 2019

Вы можете создать singleton class для SharedPreference, а затем вы можете reuse его из любого места.

public class SessionManager {
  private static SessionManager jInstance;
  private final SharedPreferences prefs;
  private final SharedPreferences.Editor editor;

  private SessionManager(Context context) {
      prefs = context.getSharedPreferences("Your_Preference_name", Context.MODE_PRIVATE);
      editor = prefs.edit();
  }

  public static synchronized SessionManager getInstance(Context context) {
      if (jInstance != null) {
          return jInstance;
      } else {
          jInstance = new SessionManager(context);
          return jInstance;
      }
  }

  public void setTextSize(int textSize){
      editor.putInt("text_size",textSize);
      editor.apply();
  }
  public int getTextSize(){
      return prefs.getInt("text_size",0); // you can set default size as you want
  }
}

Теперь В вашем activity выполните следующее.

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

    // initialize your text view here
    textView = (TextView)findViewById(R.id.textView1); // add this line here and remove from `CreateAlertDialogWhitRadioGroupButton`

    // set text size from preference
    textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, SessionManager.getInstance(this).getTextSize());

    button =(Button)findViewById(R.id.button);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            CreateAlertDialogWhitRadioGroupButton();
        }

    });


}

public void CreateAlertDialogWhitRadioGroupButton() {

    Context context;
    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
    builder.setTitle("Title text");
    // remove below line and add it inside the onCreate
    //textView = (TextView)findViewById(R.id.textView1);

    builder.setSingleChoiceItems(values, -1, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int item) {
            int textSize = 0;
            switch (item) {
                case 0:
                    textSize = 20;
                    break;
                case 1:
                    textSize = 30;
                    break;
                case 2:
                    textSize = 40;
                    break;
            }
            // set text size to your textview.
            textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, textSize);
            // save your text size to preference
            SessionManager.getInstance(YourActivityName.this).setTextSize(textSize)
            alertDialogTextSize.dismiss();
        }
    });
    alertDialogTextSize = builder.create();
    alertDialogTextSize.show();
}
0 голосов
/ 03 ноября 2019

Вы неправильно создаете экземпляр объекта SharedPreference . т.е. Вы используете это

 SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);

Вы должны использовать getSharedPreferences , который принимает два параметра

  1. Имя файла SharedPrefs
  2. Режим вкоторый вы хотите открыть файл

Но вы передаете только один параметр. Так что поменяйте его следующим образом

 SharedPreferences sharedPreferences = getSharedPreferences("my_prefs_file", Context.MODE_PRIVATE);

И getPreferences (int) работает по-другому, подробнее об этом здесь ->

https://developer.android.com/reference/android/app/Activity.html#getPreferences(int)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...