有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案