Сохранение и загрузка Textcolor и TypeFace с помощью SharedPreferences

Проект APP, над которым я работаю, действует как личное расписание, в котором вы можете записать, как выглядит ваше расписание на следующий день, сохранить его, и при создании приложения весь текст, который вы изначально вводили, все еще будет там. Изначально у меня была функция сохранения и загрузки, работающая с использованием общих настроек, но теперь я хочу добавить в приложение функцию выделения, которая изменяет текст в определенных editTexts на полужирный и красный цвет.

Я пробовал использовать логическую переменную sharedPref как способ сообщить, какими должны быть цвет и шрифт EditText, но я уверен, что кодирую это неправильно. Вот код:

  EditText et0;
  Button hb0, b1, b2;
public static final String SHARED_PREFS = "sharedPrefs";
public static final String SIX_AM = "sixAM";
SharedPreferences sharedPreferences;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    final MediaPlayer saveMP = MediaPlayer.create(this, R.raw.save);
    final MediaPlayer aNewDayMP = MediaPlayer.create(this, R.raw.anewday);

    // Each declared EditText variable in the code is then assigned an EditText from the xml.
    et0 =(EditText)findViewById(R.id.slot0);
    b1=(Button)findViewById(R.id.saveButton);
    b2=(Button)findViewById(R.id.clearButton);
    hB0=(Button)findViewById(R.id.highLighter0);

    sharedPreferences = getSharedPreferences(SHARED_PREFS, Context.MODE_PRIVATE);

    b1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {


            saveMP.start();
            SharedPreferences.Editor editor = sharedPreferences.edit();
            editor.putString(SIX_AM, et0.getText().toString());

            editor.commit();

            // Declaring a toast for the user to see they have saved their own data.
            Toast.makeText(MainActivity.this, "Saved!", Toast.LENGTH_SHORT).show();
        }
    });

   b2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            aNewDayMP.start();
            et0.setText("");
        }
    });

   hB0.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

           if (et0.getCurrentTextColor()==Color.BLACK) {
               et0.setTextColor(Color.RED);
               et0.setTypeface(null, Typeface.BOLD);
               hBB0 = TRUE;

            } else {
                et0.setTextColor(Color.BLACK);
                et0.setTypeface(null, Typeface.NORMAL);
                hBB0 = FALSE;

            }


        }
    });

    loadData();

}
// The loadData method
public void loadData(){
    SharedPreferences sharedPreferences = getSharedPreferences(SHARED_PREFS, MODE_PRIVATE);
    et0.setText(sharedPreferences.getString(SIX_AM, ""));


Please note I am a complete amateur and did my best to parse away lines of code that weren't important to the question. If anyone can help or has a recommendation on a better way to do this, please let me know, cheers.

вы пробовали использовать appyl вместо фиксации?

JDevoloper 02.04.2021 10:23
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
21
1

Ответы 1

Я подозреваю, что проблема заключается в том, что вы дважды инициализируете sharedPreferences, сначала в onCreate () как поле (атрибут класса), а затем в loadData как локальную переменную. Я думаю, что если вы удалите инициализацию в loadData и просто используете поле, инициализированное в onCreate, оно должно прочитать сохраненное значение.

Другие вопросы по теме