到目前为止,我已经记录了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>
为了记录,这里是我迄今为止与偏好战斗(并赢得)的战斗:
</VENT>
感谢您提供有关我最新问题的任何帮助。
P.S。我意识到非片段方法现在已被弃用,但我是Android新手,并且生产原型的时间紧迫,除了我的Nexus 7平板电脑之外不需要运行任何东西。我更喜欢它,虽然现在看起来我没有随时保存。
答案 0 :(得分:3)
您似乎在主活动"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);
}
}
答案 1 :(得分:2)
我认为该代码段的问题在于您正在使用onStart,当您转到PrefsActivity然后返回MainActivity时,可能无法调用它。 相反,你想像这样使用onResume():
@Override
public void onResume()
{
super.onResume();
SharedPreferences prefs = getSharedPreferences("app_prefs", MODE_PRIVATE);
int somePrefValue = prefs.getInt("somePrefKey", 1);
/*...*/
}
返回MainActivity时,肯定会调用onResume。
http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle处的生命周期图说明了这一点。