Это моя первая публикация здесь, поэтому, если моя проблема не ясна и требуется дополнительная информация, пожалуйста, дайте мне знать.
Я делаю приложение на Android, и я выполнил действие Preference,Когда я изменяю значение предпочтений, лето обновляется до значения предпочтения.Он отлично работает, когда я впервые вхожу в него, но программа перестает обновлять сводку, если я вхожу, а затем снова вхожу.
Я попытался переопределить OnResume для действия, в котором есть прослушиватель для повторной регистрации onPreferenceChangedListener,но это не сработало.
MainActivity.java
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import androidx.appcompat.app.AppCompatActivity;
import androidx.preference.PreferenceManager;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import edu.christiansen.character_creator.Classes.CharacterV5;
import edu.christiansen.character_creator.data.globalVars;
public class MainActivity extends AppCompatActivity implements SharedPreferences.OnSharedPreferenceChangeListener {
SharedPreferences sharedPreferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
androidx.appcompat.widget.Toolbar toolbar = findViewById(R.id.main_toolbar);
.
.
.
setupSharedPreferences();
.
.
.
}
.
.
.
private void setupSharedPreferences() {
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
sharedPreferences.registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (key.equals("ppTogp") || key.equals("gpTosp") || key.equals("spTocp")) {
SettingsFrag.Instance.CheckSetEdit(key);
} else if(key.equals("roll_type")){
RollSettings.Instance.setRollScreen(key);
} else if (key.equals("min_roll") || key.equals("min_points")){
RollSettings.Instance.CheckSetEdit(key);
}
}
@Override
protected void onResume() {
super.onResume();
androidx.preference.PreferenceManager.getDefaultSharedPreferences(this)
.registerOnSharedPreferenceChangeListener(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
androidx.preference.PreferenceManager.getDefaultSharedPreferences(this)
.unregisterOnSharedPreferenceChangeListener(this);
}
}
SettingFrag.java
public class SettingsFrag extends PreferenceFragmentCompat {
public static SettingsFrag Instance;
private PreferenceScreen preferenceScreen;
Preference RollPreference;
private String Lastppconvertion;
private String Lastgpconvertion;
private String Lastspconvertion;
public SettingsFrag() {
// Required empty public constructor
}
@Override
public void onCreatePreferences(Bundle bundle, String s) {
addPreferencesFromResource(R.xml.fragment_settings);
RollPreference = findPreference("roll_preferences");
preferenceScreen = this.getPreferenceScreen();
if (Instance == null){
Instance = this;
}
UpdateEditTextPreferences("ppTogp");
UpdateEditTextPreferences("gpTosp");
UpdateEditTextPreferences("spTocp");
}
public void CheckSetEdit(String key){
EditTextPreference edp = (EditTextPreference) preferenceScreen.findPreference(key);
if(RollSettings.isInteger(edp.getText())){
UpdateEditTextPreferences(key);
setValue(key, edp.getText());
} else {
Toast.makeText(getContext(), "Invalid Entry - Please Try again", Toast.LENGTH_LONG).show();
edp.setText(getValue(key));
}
}
private void setValue(String key, String text){
if (key.equals("ppTogp")){
Lastppconvertion = text;
} else if (key.equals("gpTosp")){
Lastgpconvertion = text;
} else if (key.equals("spTocp")){
Lastspconvertion = text;
}
}
private String getValue(String key){
if (key.equals("ppTogp")){
return Lastppconvertion;
} else if (key.equals("gpTosp")){
return Lastgpconvertion;
} else if (key.equals("spTocp")){
return Lastspconvertion;
}
return "";
}
public void UpdateEditTextPreferences(String key){
EditTextPreference etp = (EditTextPreference) preferenceScreen.findPreference(key);
preferenceScreen.findPreference(key).setSummary(etp.getText());
}
Понятия не имею, почему не работает, потому что изменениеслушатель должен начать работу снова, когда я вернусь к основной деятельности.Любое понимание этой проблемы было бы полезно.
Спасибо