到目前为止,我已经记录了可能 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>
感谢您为我的最新问题提供的任何帮助。
PS 我意识到非片段方法现在已被弃用,但我是 Android 新手,并且生产原型的截止日期很紧,该原型不需要在我的 Nexus 7 平板电脑上运行。我更喜欢简单,尽管现在看起来我没有节省任何时间。