Проект 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.




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