其他分享
首页 > 其他分享> > android – 首选项活动设置更改不会坚持

android – 首选项活动设置更改不会坚持

作者:互联网

到目前为止,我已经记录了6个小时与Android偏好的战斗,包括审查和尝试许多stackoverflow建议.我最近的问题是,我根据我的偏好活动所做的更改并没有延续到我的主要活动.我已经提炼了代码.

主要活动:

public class MainActivity extends Activity {

    /*...*/

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        /*...*/
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item)
    {
        super.onOptionsItemSelected(item);
        switch(item.getItemId())
        {
        case R.id.menu_settings:
            startActivity(new Intent(this, PrefsActivity.class));
            return true;
        }
        return false;
    }

    @Override
    public void onStart()
    {
        super.onStart();

        SharedPreferences prefs = getSharedPreferences("app_prefs", MODE_PRIVATE);
        int somePrefValue = prefs.getInt("somePrefKey", 1);
        /*...*/
    }
}

偏好活动:

public class PrefsActivity extends PreferenceActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.app_prefs);
    }
}

偏好资源:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

    <PreferenceCategory android:title="Some Category">

        <EditTextPreference
            android:key="somePrefKey"
            android:title="Some Preference"
            android:defaultValue="1"
            android:numeric="integer" /> 

    </PreferenceCategory>

</PreferenceScreen>

如果它很重要,我在4.1中遇到了这个问题,无论是在模拟器中还是在Nexus 7上.

< VENT>为了记录,这里是我到目前为止战斗(和赢得)的战斗与偏好:

> XML首选项文件在Eclipse树中的位置以及内容
叫它.
>如何强制首选项活动将值限制为
整数或浮点数.
>将偏好值指定为
XML中的整数或浮点数不会使首选项成为
整数或浮点数 – 它仍然是一个字符串.
>尽管有几种方法
取名为共享首选项文件的唯一方法
实际上只会加载文件是addPreferencesFromResource()
来自PreferenceActivity.我必须冗余地编写默认值
XML和第一个prefs getter,除非我解析XML.

尽管阅读了有关偏好的官方Android文档,尽管阅读了有关在三本不同书中使用偏好的章节,但我遇到了这些问题. Android文档通常非常好,但考虑到我(继续)的麻烦和大量的stackoverflow问题,我认为这部分需要一些工作.< / VENT>

感谢您提供有关我最新问题的任何帮助.

附:我意识到非片段方法现在已被弃用,但我是Android新手,并且生产原型的时间紧迫,除了我的Nexus 7平板电脑之外不需要运行任何东西.我更喜欢它,虽然现在看起来我没有节省任何时间.

解决方法:

您似乎在主活动“app_prefs”中使用了非默认的SharedPreferences,但您的PreferenceActivity不会引用它,并且可能存储到默认的SharedPreferences.

你应该:

>使用Main活动中的默认SharedPreferences,而不是命名的:(也按照louielouie的建议移动到onResume)

@Override
public void onResume()
{
    super.onResume();

    SharedPreferences prefs = 
       PreferenceManager.getDefaultSharedPreferences(getApplicationContext());

    int somePrefValue = Integer.valueOf(prefs.getString("somePrefKey", "1"));
    /*...*/
}

要么
>告诉您的PreferenceActivity您要使用的SharedPreferences的名称:

public class PrefsActivity extends PreferenceActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getPreferenceManager().setSharedPreferencesName("app_prefs"); //ADD ME
        addPreferencesFromResource(R.xml.app_prefs);
    }
}

标签:preferenceactivity,android,sharedpreferences
来源: https://codeday.me/bug/20190901/1785083.html