Я пытался сделать экран настроек 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, и переключение / добавление новых не возможно)