当前位置: 首页 > 知识库问答 >
问题:

Android首选项

蒋波光
2023-03-14

我开始认为我的问题是我的偏好没有正确完成,这就是为什么我无法访问tem。以下是我的偏好:

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

    <PreferenceCategory 
        android:title="@string/pref_user_profile" 
        android:textSize="20px"
        android:layout="@layout/pref_layout">

        <SwitchPreference 
                android:title="@+string/pref_frequency"
                android:summary="@+string/pref_frequency_summary"
                android:key="frequency" 
                android:defaultValue="true"
            android:layout="@layout/pref_layout"/>

        <SwitchPreference 
                android:title="@+string/pref_time"
                android:summary="@+string/pref_time_summary"
                android:key="time"
                android:defaultValue="true"
            android:layout="@layout/pref_layout"/>

        <SwitchPreference  
                android:title="@+string/pref_symptothermal"
                android:summary="@+string/pref_symptothermal_summary"
                android:key="symptothermal"
                android:defaultValue="true"
                android:layout="@layout/pref_layout"/>

        <SwitchPreference 
                android:title="@+string/pref_cervical_mucus"
                android:summary="@+string/pref_cervical_mucus_summary"
                android:key="cervical_mucus"
                android:defaultValue="true"
            android:layout="@layout/pref_layout"/>    

        <SwitchPreference 
                android:title="@+string/pref_mucus_stamps"
                android:summary="@+string/pref_mucus_stamps_summary"
                android:key="mucus_stamps"
                android:defaultValue="true"
            android:layout="@layout/pref_layout"/>

        <SwitchPreference 
                android:title="@+string/pref_fertile_infertile"
                android:summary="@+string/pref_fertile_infertile_summary"
                android:key="fertile_infertil" 
                android:defaultValue="true"
            android:layout="@layout/pref_layout"/>
    </PreferenceCategory>

</PreferenceScreen>

Java:

package com.projectcaruso.naturalfamilyplaning;

import com.projectcaruso.naturalfamilyplanning.R;
import android.os.Bundle;
import android.preference.PreferenceActivity;

public class UserSettingActivity extends PreferenceActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        addPreferencesFromResource(R.xml.settings);

    }
}

这是我对设置菜单的调用:

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        final int RESULT_SETTINGS = 1;

        switch (item.getItemId()) {
        case R.id.projectcaruso:
            Util.goToGitHub(this);
            return true;
        case R.id.about:
            new AlertDialog.Builder(this)
            .setTitle(R.string.about)
            .setMessage(Html.fromHtml(getString(R.string.about_msg)))
            .show();
            break;
        case R.id.licenses:
            new AlertDialog.Builder(this)
            .setTitle(R.string.licenses)
            .setMessage(Html.fromHtml(getString(R.string.license_detail)))
            .show();
            break;
        case R.id.contact:
            break;
        case R.id.settings:
            Intent j = new Intent(this, UserSettingActivity.class);
            startActivityForResult(j, RESULT_SETTINGS);
            break;
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getSupportMenuInflater().inflate(R.menu.settings, menu);
        return true;
    }

}

因此,任何帮助将不胜感激!我正在尝试访问这些首选项,但无法访问。它似乎很好地拯救了他们。我能够测试和运行代码,更改pref并保存它们的状态。但是,当我尝试访问它们时,我不能...以下是我用来尝试访问它们的代码:

编辑:我已将其更改为如下调用,无论设置如何,它仍然是“你好,祝酒词2!”@覆盖公共无效onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState); SharedPre在首选项=this.getActivity(). getSharedPreection("UserSettingActive",0);//膨胀此片段的布局

            Boolean symptothermal = preferences.getBoolean("symptothermal", true);

            if (!symptothermal) {
                Context context = getActivity().getApplicationContext();
                Toast.makeText(context, "Hello toast 1!", Toast.LENGTH_LONG).show();
            } else {
                Context context = getActivity().getApplicationContext();
                Toast.makeText(context, "Hello toast 2!", Toast.LENGTH_LONG).show();
            }

            if (!symptothermal) {
                TextView temp = (TextView) getView().findViewById(R.id.temp);
                temp.setVisibility(View.GONE);
            }
        }

共有2个答案

汪鸿志
2023-03-14

可能您正在尝试从不同的文件中读取首选项。将getPrepriceManager(). setSharedPreisscesName("pref");添加到UserSettingActive,看看是否会有帮助

贾飞章
2023-03-14

问题是你如何试图访问它们。

您使用此行:

SharedPreferences preferences = this.getActivity().getSharedPreferences("pref",0);

何时访问通过PreferenceActivity存储的首选项,您应该调用默认首选项。

SharedPreferences mPreferences = PreferenceManager.getDefaultSharedPreferences(this);

就是这样。

编辑

如果您正在从片段调用getDefaultSharedPreices(),您只需更改作为参数传递的值。上面示例中的this是一个上下文,要从片段中调用它,请执行以下操作:

SharedPreferences mPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
 类似资料:
  • 问题内容: 在我的preferences.xml中,我具有如下所示的preference元素: 我想分配事件,因此如果用户单击它,则可以打开new 或浏览器。我试图像使用按钮一样进行操作,但这似乎不起作用。 问题答案: 巴德尔 您需要设置项目,然后在您的代码中可以执行… 假设您在XML中使用以下内容: 然后,您可以在代码中执行以下操作:

  • 对于下面的代码,我正在尝试检索共享的首选项,我认为它保存正确,但当我回到登录屏幕时,所有的数据都消失了。我需要它留在我回到这个屏幕上。所以我在个人资料页面上输入姓名、年龄和id到三个单独的行中。然后按下save按钮,然后按下action Bar上的back转到前面的页面。当我回到个人资料页面时,我的信息应该还在那里,但它没有任何帮助?

  • 非常感谢您的光临,我正在为学校开发一个应用程序,我遇到了另一个问题。该应用程序的主要思想是跟踪您的卡路里,我希望它能节省卡路里,所以当应用程序关闭时,它仍然会记住他们。我已经忙了一段时间了,现在尝试使用SavedPreferences,但我总是出现错误。我希望有人能帮我。 } 我可能做了很多明显的愚蠢的事情,但我真的弄不明白。 多谢!

  • 更新崩溃日志:

  • 我是Android编程的新手,首先我想用SharedPreays做一个简单的选项菜单演示。我已经创建了基本的结构,但是我不知道如何将OnPreancceClickListener附加到Preation。尽管如此,我可以使用onSharedPreancceChanged方法,但是没有其他事件侦听器。(再次,我是初学者,所以我不知道为什么会这样。) 我已经阅读了有关创建菜单步骤的文档:https://

  • 例如:如果我有一个“丢弃旧消息”的首选项设置,它指定了需要清理消息的天数。在中,我希望用户看到: “丢弃旧消息”<-title “x天后清理邮件”<-摘要,其中x是当前首选项值 额外的功劳:使它可重用,所以我可以很容易地将它应用到我的所有首选项,而不管它们的类型是什么(这样它就可以使用EditTextPreference,ListPreference等,只需最少的编码量)。