Как получить событие OnPreferenceChanged из SeekBarPreference с помощью androidx - PullRequest
0 голосов
/ 11 июня 2019

Я пытался сделать экран настроек Android с несколькими SeekBarPreferences, чтобы выбрать три числа от 0 до 10. Однако мой код OnPreferenceChanged не вызывается.Код активности моих настроек:

import android.content.SharedPreferences;
import android.os.Bundle;
import android.widget.Toast;

import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import androidx.preference.Preference;
import androidx.preference.PreferenceFragmentCompat;
import androidx.preference.SeekBarPreference;

public class AdvancedSettingsActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.settings_activity);
        getSupportFragmentManager()
                .beginTransaction()
                .replace(R.id.settings, new AdvancedSettingsFragment())
                .commit();
        ActionBar actionBar = getSupportActionBar();
        if (actionBar != null) {
            actionBar.setDisplayHomeAsUpEnabled(true);
            actionBar.setDisplayShowHomeEnabled(true);
        }
    }

    public static class AdvancedSettingsFragment extends PreferenceFragmentCompat {
        @Override
        public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
            setPreferencesFromResource(R.xml.advanced_preferences, rootKey);
            final SharedPreferences prefs=getContext().getSharedPreferences("gameSettings",0);
            final SharedPreferences.Editor prefsedit=prefs.edit();
            SeekBarPreference red=findPreference("redseekbar");
            SeekBarPreference green=findPreference("greenseekbar");
            SeekBarPreference blue=findPreference("blueseekbar");
            red.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
                @Override
                public boolean onPreferenceChange(Preference preference, Object newValue) {
                    prefsedit.putInt("red",(int)newValue);
                    prefsedit.apply();
                    Toast.makeText(getContext(),newValue+"",Toast.LENGTH_LONG);
                    return true;
                }
            });
            green.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
                @Override
                public boolean onPreferenceChange(Preference preference, Object newValue) {
                    prefsedit.putInt("green",(int)newValue);
                    prefsedit.apply();
                    Toast.makeText(getContext(),newValue+"",Toast.LENGTH_LONG);
                    return true;
                }
            });
            blue.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
                @Override
                public boolean onPreferenceChange(Preference preference, Object newValue) {
                    prefsedit.putInt("blue",(int)newValue);
                    prefsedit.apply();
                    Toast.makeText(getContext(),newValue+"",Toast.LENGTH_LONG);
                    return true;
                }
            });
        }
    }
}

Код макета моих предпочтений:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <SeekBarPreference
        app:key="redseekbar"
        app:title="Red"
        app:summary="The red change value"
        android:max="10"
        app:defaultValue="0"
        app:showSeekBarValue="true"/>
    <SeekBarPreference
        app:key="greenseekbar"
        app:title="Green"
        app:summary="The green change value"
        android:max="10"
        app:defaultValue="0"
        app:showSeekBarValue="true"/>
    <SeekBarPreference
        app:key="blueseekbar"
        app:title="Blue"
        app:summary="The blue change value"
        android:max="10"
        app:defaultValue="0"
        app:showSeekBarValue="true"/>

</PreferenceScreen>

Как мне получить получение события, похожего на преференцию, из seekbarpreference?(Я использую библиотеки поддержки v7, и переключение / добавление новых не возможно)

1 Ответ

0 голосов
/ 11 июня 2019

Хорошо, я случайно забыл вызвать .show () на моих тостах.Кроме того, я неправильно настроил его для тестирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...