gpt4 book ai didi

android - 首选项 Activity 设置更改不会坚持

转载 作者:太空宇宙 更新时间:2023-11-03 13:00:07 25 4
gpt4 key购买 nike

到目前为止,我已经记录了大约 6 个小时与 Android 偏好设置的斗争,包括审查和尝试许多 stackoverflow 的建议。我最近的问题是我从我的偏好 Activity 中所做的更改没有转移到我的主要 Activity 中。我已经提炼了代码。

主要 Activity :

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);
/*...*/
}
}

偏好 Activity :

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>作为记录,以下是我迄今为止根据偏好进行(并赢得)的战斗:

  1. XML 首选项文件在 Eclipse 树中的位置以及要做什么叫它。
  2. 如何强制首选项 Activity 将值限制为整数或 float 。
  3. 将偏好值指定为XML 中的整数或 float 不会使首选项成为整数或 float ——它仍然是一个字符串。
  4. 尽管有几种方法取共享首选项文件的名称,这是唯一的方法实际上会加载文件的是addPreferencesFromResource(),只是来自 PreferenceActivity。我必须对默认值进行冗余编码XML 和第一个 prefs getter,除非我解析 XML。

尽管我阅读了有关首选项的官方 Android 文档,并且阅读了三本不同书籍中有关使用首选项的章节,但我还是遇到了这些问题。 Android 文档一般都很好,但考虑到我(持续)遇到的麻烦和大量关于此的 stackoverflow 问题,我认为这部分需要一些工作。 </VENT>

感谢您为我的最新问题提供的任何帮助。

附言我意识到非 fragment 方法现在已被弃用,但我是 Android 的新手并且有一个紧迫的期限来制作一个原型(prototype),除了我的 Nexus 7 平板电脑之外不需要在任何东西上运行。我更喜欢它简单,尽管现在看起来我没有节省任何时间。

最佳答案

您似乎在主 Activity “app_prefs” 中使用了非默认的 SharedPreferences,但您的 PreferenceActivity 没有引用它,并且可能正在存储到默认的 SharedPreferences。

你应该或者:

  1. 在主要 Activity 中使用默认的 SharedPreferences,而不是命名的:(也按照 louielouie 的建议移动到 onResume)

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

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

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

  2. 将您要使用的 SharedPreferences 的名称告诉您的 PreferenceActivity:

    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);
    }
    }

关于android - 首选项 Activity 设置更改不会坚持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12866497/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com