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