java - 当我退出我的设置菜单并重新输入时,OnPreferenceChangedListener 停止工作
问题描述
这是我第一次在这里发帖,所以如果我的问题不清楚并且需要更多信息,请告诉我。
我正在android上制作一个应用程序,并且我做了一个偏好活动。当我更改首选项的值时,摘要会更新为首选项的值。当我第一次输入它时效果很好,但是如果我退出然后重新输入,程序会停止更新摘要。
我尝试为具有侦听器的活动覆盖 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());
}
我不知道为什么它不起作用,因为当我导航回主要活动时,应该重新启动更改侦听器。对此问题的任何见解都会有所帮助。
谢谢
解决方案
推荐阅读
- python - 如何在 python 中使用正则表达式从字符串中获取某人的姓名?
- r - 如何在字符串中删除初始句点之前的文本、初始句点本身和最后句点之后的文本?
- c - 使用 (*variable).member 与 *variable.member 取消引用结构 Struct_type 的成员
- windows - PyCharm 的两个实例
- css - CSS 性能,#id vs .class vs [^regex$] vs 选择器
- python - 将一列'int'转换为'string'
- spring - Spring MVC - Dispatcher Servlet 找不到任何页面
- c++ - clang:发射是什么意思?
- ios - iOS - 以编程方式创建今日小部件扩展
- python - 带有精确时间戳的语音识别?