Когда я выхожу из своего меню настроек и снова вхожу в него, OnPreferenceChangedListener перестает работать - PullRequest
0 голосов
/ 31 мая 2019

Это моя первая публикация здесь, поэтому, если моя проблема не ясна и требуется дополнительная информация, пожалуйста, дайте мне знать.

Я делаю приложение на 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());
    }

Понятия не имею, почему не работает, потому что изменениеслушатель должен начать работу снова, когда я вернусь к основной деятельности.Любое понимание этой проблемы было бы полезно.

Спасибо

...