【问题标题】:Show current SeekBarPreference value into ScreenPreference在 ScreenPreference 中显示当前 SeekBarPreference 值
【发布时间】:2026-01-13 03:45:02
【问题描述】:

将 SeekBarPreference 的当前值显示到 ScreenPreference 中的好方法是什么。 我试图插入 textview 但应用程序崩溃了。 有什么建议吗?

preferences.xml

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
  <SeekBarPreference
      android:id="@+id/seekbar_pref"
      android:key="seekbar_x"
      android:title="Value"
      android:defaultValue="1"
      android:max="60"/>
  </PreferenceScreen>

Preferences.java 公共类 Preferences 扩展 PreferenceActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getFragmentManager().beginTransaction().replace(android.R.id.content, new MyPreferenceFragment()).commit();
}

public static class MyPreferenceFragment extends PreferenceFragment
{
    @Override
    public void onCreate(final Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preferences);
    }
}

Main.java

private SharedPreferences.OnSharedPreferenceChangeListener preferenceChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
        @Override
        public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
            Log.e("SHARED",  "VAL: " + sharedPreferences.getInt("seekbar_x",10));
        }
    };

【问题讨论】:

    标签: java android android-preferences seekbar


    【解决方案1】:

    在您的 onCreate 方法的末尾添加这一行(添加首选项后):

    SeekBarPreference pref = (SeekBarPreference) findPreference("seekbar_pref");
    

    然后像这样在上面添加监听器:

    pref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
    
    @Override
    public boolean onPreferenceChange(Preference preference, Object newValue) {
        int value = mSeekBarPreference.getProgress(); //or (int)  newValue
        //You can now use this value wherever you like:
        pref.setSummary("Value: " + value);
        return true;
    }
    });
    

    【讨论】:

    • SeekBarPreference pref = (SeekBarPreference) findPreference("seekbar_pref");我无法导入 SeekBarPreference,唯一的建议是“创建类 ....”
    • 呃,同样的事情发生在我现在,我签入了 Android Studio。我不太明白如何在 xml 中而不是在代码中使用它。我在 SO 上找到了类似的question。他们将它用作 Java 中的一个类。
    • 老实说,我不知道。我自己从未使用过 SeekBarPreference。在它存在之前,您可能不得不求助于其他一些方法,例如使用常规 seekBar 并在 SharedPrefs 中手动记住值。