android - 在首选项中保存搜索栏进度

标签 android seekbar

请告诉我如何在 Android 的首选项中保存 SeekBar 进度,以及如何在用户再次打开时将保存的值显示在搜索栏上。

最佳答案

尝试我的简单但完整的示例,其中包含 slider 首选项 at GitHub :

screenshot

SeekBarPreference.java (将 SeekBar 进度保存为整数值):

public class SeekBarPreference extends Preference implements OnSeekBarChangeListener {
    private SeekBar mSeekBar;
    private int mProgress;

    public SeekBarPreference(Context context) {
        this(context, null, 0);
    }

    public SeekBarPreference(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public SeekBarPreference(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        setLayoutResource(R.layout.preference_seekbar);
    }

    @Override
    protected void onBindView(View view) {
        super.onBindView(view);
        mSeekBar = (SeekBar) view.findViewById(R.id.seekbar);
        mSeekBar.setProgress(mProgress);
        mSeekBar.setOnSeekBarChangeListener(this);
    }

    @Override
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
        if (!fromUser)
            return;

        setValue(progress);
    }

    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {
        // not used
    }

    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {
        // not used
    }

    @Override
    protected void onSetInitialValue(boolean restoreValue, Object defaultValue) {
        setValue(restoreValue ? getPersistedInt(mProgress) : (Integer) defaultValue);
    }

    public void setValue(int value) {
        if (shouldPersist()) {
            persistInt(value);
        }

        if (value != mProgress) {
            mProgress = value;
            notifyChanged();
        }
    }

    @Override
    protected Object onGetDefaultValue(TypedArray a, int index) {
        return a.getInt(index, 0);
    }
}

preference_seekbar.xml (带有SeekBar和TextView的布局文件):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_vertical" >

    <SeekBar
        android:id="@+id/seekbar"
        android:layout_width="0dp"
        android:layout_weight="80"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@android:id/summary"
        android:layout_width="0dp"
        android:layout_weight="20"
        android:layout_height="wrap_content" />

</LinearLayout>

关于android - 在首选项中保存搜索栏进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15969877/

相关文章:

java - 将数据库模型与网络模型分开

android - SeekBar Volume 在设置最大音量时隐藏 slider

android - EditText 更新 SeekBar 崩溃

android - 创建小于默认值的 SeekBar?

android - 如何显示离散 slider 的刻度线?

android - 如何修复尝试在空对象引用上调用接口(interface)方法

android - 如何引用不在图书馆项目中但仅在依赖应用程序项目中的资源?

Android FTP 连接失败

android - 使用支持库的 SeekBar Holo 主题

Java 类声明语法