java当我退出我的设置菜单并重新输入时,OnPreferenceChangedListener将停止工作
这是我第一次在这里发布,所以如果我的问题不清楚,需要更多信息,请让我知道
我正在安卓上制作一个应用程序,我已经做了一个偏好活动。当我更改首选项的值时,汇总将更新为首选项的值。当我第一次输入它时,它工作得很好,但是如果我退出然后重新输入,程序将停止更新摘要
我尝试为使侦听器重新注册onPreferenceChangedListener的活动重写OnResume,但没有成功
主要活动。爪哇
import 安卓.content.Intent;
import 安卓.content.SharedPreferences;
import 安卓.os.Bundle;
import 安卓.view.Menu;
import 安卓.view.MenuItem;
import 安卓.view.View;
import 安卓x.appcompat.app.AppCompatActivity;
import 安卓x.preference.PreferenceManager;
import com.google.安卓.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);
安卓x.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();
安卓x.preference.PreferenceManager.getDefaultSharedPreferences(this)
.registerOnSharedPreferenceChangeListener(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
安卓x.preference.PreferenceManager.getDefaultSharedPreferences(this)
.unregisterOnSharedPreferenceChangeListener(this);
}
}
设置帧。爪哇
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());
}
我不知道为什么它不起作用,因为当我导航回主活动时,应该重新启动更改侦听器。对这个问题的任何见解都会有所帮助
多谢各位
共 (0) 个答案