有 Java 编程相关的问题?

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

java如何使用安卓x从SeekBarPreference获取OnPreferenceChanged事件

我一直在尝试制作一个安卓设置屏幕,带有一些SeekBarPreferences,从0到10中选择三个数字。 但是,不会调用我的OnPreferenceChanged代码。 我的设置活动代码:

import 安卓.content.SharedPreferences;
import 安卓.os.Bundle;
import 安卓.widget.Toast;

import 安卓x.appcompat.app.ActionBar;
import 安卓x.appcompat.app.AppCompatActivity;
import 安卓x.preference.Preference;
import 安卓x.preference.PreferenceFragmentCompat;
import 安卓x.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.安卓.com/apk/res-auto"
    xmlns:安卓="http://schemas.安卓.com/apk/res/安卓">
    <SeekBarPreference
        app:key="redseekbar"
        app:title="Red"
        app:summary="The red change value"
        安卓:max="10"
        app:defaultValue="0"
        app:showSeekBarValue="true"/>
    <SeekBarPreference
        app:key="greenseekbar"
        app:title="Green"
        app:summary="The green change value"
        安卓:max="10"
        app:defaultValue="0"
        app:showSeekBarValue="true"/>
    <SeekBarPreference
        app:key="blueseekbar"
        app:title="Blue"
        app:summary="The blue change value"
        安卓:max="10"
        app:defaultValue="0"
        app:showSeekBarValue="true"/>

</PreferenceScreen>

我应该如何从seekbarpreference获得一个onpreferencechanged,就像事件一样? (我正在使用v7支持库,切换/添加新库不是一个选项)


共 (1) 个答案

  1. # 1 楼答案

    好吧,我不小心忘了打电话。在我的祝酒词上显示()。而且,我没有正确配置它进行测试