标签: android-preferences

如何动态设置首选项的值?

我使用了一个特殊的preferenceActivity实现,它允许使用标头并且也与旧的android版本兼容。我想要完成的是,我想在未选中ListPreferencea时重置a的值,但每当或被调用时,我都会得到。这是我的代码:CheckBoxPreferencesetValue()setEntries()null pointer Exception

import java.util.List;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.os.Build;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.ListPreference;
import android.preference.PreferenceManager;
import android.util.Log;
import com.actionbarsherlock.app.SherlockPreferenceActivity;

public class FragmentPreferences extends SherlockPreferenceActivity implements
    OnSharedPreferenceChangeListener {
private static final String TAG = "FragmentPreferences";
private boolean themeIsDirty = false;
private ListPreference prefDspProfile;

@SuppressLint("NewApi")
@SuppressWarnings("deprecation")
@Override
protected void onCreate(Bundle savedInstanceState) {
    setTheme(ActivityOriginal.THEME);
    super.onCreate(savedInstanceState);

    // Load the preferences from an XML resource
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
        addPreferencesFromResource(R.xml.preference_general); …
Run Code Online (Sandbox Code Playgroud)

android android-preferences

3
推荐指数
1
解决办法
2万
查看次数

找不到 Androidx SeekBarPreference xml 属性 setMax

我正在尝试实现 androidx SeekBarPreference,根据文档我可能能够setMax在我的 xml 中使用属性,但是这样做时我收到以下错误:

在xml中:

<SeekBarPreference
    app:key="preference_key"
    app:title="@string/preference"
    app:showSeekBarValue="true"
    app:setMax="10"/>
Run Code Online (Sandbox Code Playgroud)

错误:

root_preferences.xml:53: AAPT: error: attribute setMax (aka 
gls.dev.MyApplication:setMax) not found.
Run Code Online (Sandbox Code Playgroud)

但是,在代码中设置属性时,它就像一个魅力:

findPreference<SeekBarPreference>("preference_key")?.apply {
    max = 10
    min = 1
    seekBarIncrement = 1
    isAdjustable = true
}
Run Code Online (Sandbox Code Playgroud)

xml android android-preferences kotlin

3
推荐指数
1
解决办法
1259
查看次数

Android 首选项数据存储流不会发出相同的值

只是测试Preferences DataStore并发现提供的Flow输出不会发出相同的值,我的设置如下:

数据存储实用程序类:

object DataStore {
    private val Context.settings by preferencesDataStore("settings") 

    suspend fun saveBoolean(context: Context, keyResId: Int, value: Boolean) {
        val key = booleanPreferencesKey(context.getString(keyResId))

        context.settings.edit {
            it[key] = value
        }
    }

    fun getBooleanFlow(context: Context, keyResId: Int, defaultValueResId: Int): Flow<Boolean> {
        val key = booleanPreferencesKey(context.getString(keyResId))
        val defaultValue = context.resources.getBoolean(defaultValueResId)

        return context.settings.data.map {
            it[key] ?: defaultValue
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

视图模型类:

class FirstViewModel(application: Application) : AndroidViewModel(application) {
    private val uiScope = viewModelScope

    val isUpdateAvailable = DataStore.getBooleanFlow(
        getApplication(), R.string.is_update_available_key, R.bool.is_update_available_default …
Run Code Online (Sandbox Code Playgroud)

android android-preferences sharedpreferences kotlin-flow android-jetpack-datastore

3
推荐指数
1
解决办法
2430
查看次数

将侦听器添加到各个ListPreference项

我正在尝试将个别侦听器添加到a中的项目中,ListPreference但我找不到正确的代码来执行此操作.

例如,假设我有一个需要设置区域的应用程序 .所以我有ListPreference三个选择; 美洲,亚洲,欧洲.

当我使用触控板滚动项目时,我希望他们在获得焦点时说出偏好的文本.

我确信API中的某个地方我可以为各个项添加一个监听器,但我找不到它.(继承自)中有一个setOnPreferenceClickListener(..)方法,但是当您选择实际的父偏好项时.ListPreferenceDialogPreference

我需要编写一个特殊的子类吗?

编辑

在深入研究之后,我想我需要进一步澄清我的问题.使用首选项时,您可以覆盖中的onPreferenceTreeClick (PreferenceScreen prefScreen, Preference pref)方法PreferenceActivity.这允许您拦截对首选项的任何点击.但是我想在弹出的实际对话框中添加一个监听器.以上例子中的"美洲,亚洲,欧洲"选项.因此,如果我选择或点击亚洲,我可以拦截它.

所以我的(精炼)问题是如何为这些单独的选项添加一个监听器.

干杯

android event-listener listener android-preferences

2
推荐指数
1
解决办法
7705
查看次数

在Android上的警报对话框中显示首选项

我知道Android能够创建一个用于更新共享首选项的Activity,但有没有办法在警告对话框中显示"Activity",以便首选项可以显示为"弹出窗口",而不是切换到自己的活动?

我希望这是有道理的....

android android-preferences

2
推荐指数
1
解决办法
3149
查看次数

使用菜单按钮启动PreferenceActivity并使用后退按钮完成

我修改了CommonsWare的prefenceActivity应用程序但遇到了问题.

我想用菜单按钮启动prefenceActivity,然后用后退按钮完成它.

我有这个通过菜单按钮启动我的prefenceActivity:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    startActivity(new Intent(this, EditPreferences.class));
    return(true);
}
Run Code Online (Sandbox Code Playgroud)

它确实会回到我对应用程序的主视图,但我认为它还没有完成,因为当我再次按下菜单按钮时,prefenceActivity不会弹出agian.我必须关闭我的应用程序,它只能再次使用一次.

当我按下后退按钮时,我已经尝试在我的prefenceActivity中完成它,但这也无济于事.

我做错了什么?

谢谢你的帮助!

android menu back-button android-preferences

2
推荐指数
1
解决办法
6178
查看次数

如何在首选项设置中从SharedPreference中获取Long()

我有以下代码从我的xml首选项文件中获取长值,

SharedPreferences getPrefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 

long longBreak = Integer.parseInt(getPrefs.getString("breakTime", "8000"));
long shortBreak = Integer.parseInt(getPrefs.getString("breakTime", "5000"));
long workTime = Integer.parseInt(getPrefs.getString("workTime", "10000"));
Run Code Online (Sandbox Code Playgroud)

由于某种原因,我的LogCat显示"SharedPreference getPrefs = ...."行上的错误,我的android应用程序在加载长值之前中断....

我有我的偏好xml如下,

<ListPreference
    android:entries="@array/workList"
    android:entryValues="@array/workTimes"
    android:key="workTime"
    android:summary="Choose Work Time"
    android:title="Work Time" />
<ListPreference
    android:entries="@array/breakList"
    android:entryValues="@array/breakTimes"
    android:key="breakTime"
    android:summary="Choose Break Time"
    android:title="Break Time" />
Run Code Online (Sandbox Code Playgroud)

和我的数组值如下,

<string-array name="workList">
    <item>25 Minutes</item>
    <item>10 Seconds</item>
</string-array>
<string-array name="breakList">
    <item>15 Minutes</item>
    <item> 5 Minutes</item>
    <item>8 Secs</item>
    <item>5 Secs</item>
</string-array>
<string-array name="workTimes">
    <item>1500000</item>
    <item>10000</item>
</string-array>
<string-array name="breakTimes">
    <item>900000</item>
    <item>300000</item>
    <item>8000</item>
    <item>5000</item>
</string-array>
Run Code Online (Sandbox Code Playgroud)

我在差异应用程序中测试了相同的代码,它工作正常....任何帮助?提前致谢...

xml android android-preferences

2
推荐指数
1
解决办法
7091
查看次数

首选项未在PreferencesFragment中显示摘要

我有一个首选项屏幕(Fragment),它有一些从xml文件设置的首选项.我在其中调用的唯一内容FragmentaddPreferencesFromResource(R.xml.pref_main);onCreate方法.

现在,除了我的首选项中的"摘要"部分之外,一切都运行良好,例如,如果您有一个EditTextPreference并输入了一些文本,那么该文本应该在首选项下以较小的字母显示.

我正在使用自定义控件作为首选项(但它也不适用于任何官方首选项),这扩展了DialogPreference.如果我像这样设置摘要:

@Override
protected void onDialogClosed(boolean positiveResult) {
    if (positiveResult) {
        setSummary("Some summary");
    }
}
Run Code Online (Sandbox Code Playgroud)

它的工作原理,但只要我不离开屏幕,当我返回时它不再存在.有任何想法吗?

android android-preferences android-fragments

2
推荐指数
1
解决办法
1588
查看次数

Android AppCompatPreferenceActivity - 没有子类别/标题的平面设置列表

我已将SettingsActivity添加到我的项目中.默认情况下,Android Studio创建了3个类别,包含3个标题.当我点击类别时,会出现新设置屏幕.我不希望这样.我的应用程序具有非常有限的settigns选项,所以我想只获得平面设置列表,没有任何标题和类别.

我发现的,不工作或弃用api.你能指点我,有效的方向如何实现平面设置屏幕而不使用任何弃用的api?

android preferenceactivity android-preferences

2
推荐指数
1
解决办法
701
查看次数

错误:找不到ID androidx(Jetpack)首选项库的视图

我按照文档上的说明使用Android Jetpack首选项库,但出现以下错误

java.lang.RuntimeException: Unable to start activity ComponentInfo{ ... activity.SettingsActivity}: java.lang.IllegalArgumentException: No view found for id 0x7f090111 (... :id/settings_container) for fragment SettingsFragment
...
Caused by: java.lang.IllegalArgumentException: No view found for id 0x7f090111 (... :id/settings_container) for fragment SettingsFragment 
Run Code Online (Sandbox Code Playgroud)

因为我认为这通常发生在没有容器可装入片段的情况下,但是在我的情况下却有一个container(settings_container)。

我的代码如下所示

设置活动

class SettingsActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        supportFragmentManager
            .beginTransaction()
            .replace(R.id.settings_container, SettingsFragment())
            .commit()
    }
}
Run Code Online (Sandbox Code Playgroud)

设置片段

class SettingsFragment : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {

    setPreferencesFromResource(R.xml.pref_main, rootKey)
}
Run Code Online (Sandbox Code Playgroud)

activity_settings.xml

<?xml …
Run Code Online (Sandbox Code Playgroud)

android android-preferences android-jetpack

2
推荐指数
1
解决办法
506
查看次数