gpt4 book ai didi

android - 如何获得在 Android 中工作的首选项?

转载 作者:IT老高 更新时间:2023-10-28 22:18:02 34 4
gpt4 key购买 nike

我真的一直在努力解决这个问题。 Java/Android 新手。我正在编写我的第一个应用程序,这是我花了几天时间才弄清楚的第一件事。这是设置:这是一个 BAC 计算器/饮料计数器:

alt text

使用公式计算 BAC。这是论坛:

Bac = ((StandardDrinks / 2) * (GenderConstant / Weight)) - (0.017 * Hours);

如您所见,能够修改性别和体重将产生更准确和个性化的结果。所以我把它们当作 double :

double GenderConstant = 7.5; //9 for female
double Weight = 180;

要更改这些变量,我希望该人能够进入设置并选择不同的值。我已经设置了这些东西,但没有链接到上面显示的变量,因为我一生都无法弄清楚如何。他们在这里:

alt text

我按下菜单按钮,这会弹出。伟大的。我会点击设置。

alt text

现在首选项弹出。这是我的preferences.xml:

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

<PreferenceCategory android:title="Personal Settings">


<ListPreference
android:title="Gender"
android:summary="Verify or deny the presence of a Y chromosome."
android:key="genderPref"
android:defaultValue="male"
android:entries="@array/genderArray"
android:entryValues="@array/genderValues" />

<ListPreference
android:title="Weight"
android:summary="How much the planet pulls on you, in pounds."
android:key="weightPref"
android:defaultValue="180"
android:entries="@array/weightArray"
android:entryValues="@array/weightValues" />

</PreferenceCategory>

<PreferenceCategory android:title="Drink Settings">

<ListPreference
android:title="Beer Size"
android:summary="The volume of your beer, in ounces."
android:key="beerPref"
android:defaultValue="12"
android:entries="@array/beerArray"
android:entryValues="@array/beerValues" />

<ListPreference
android:title="Shot Size"
android:summary="The volume of your shot, in ounces."
android:key="shotPref"
android:defaultValue="1.5"
android:entries="@array/shotArray"
android:entryValues="@array/shotValues" />

<ListPreference
android:title="Wine Size"
android:summary="The volume of your wine, in ounces."
android:key="winePref"
android:defaultValue="5"
android:entries="@array/wineArray"
android:entryValues="@array/wineValues" />


</PreferenceCategory>
</PreferenceScreen>

前进到权重ListPreference:

alt text

然后就出现了。这些值作为字符串数组存储在 res/values/arrays.xml 中。这是一个样本,只是重量的样本:

<string-array name="weightArray">
<item>120 lbs</item>
<item>150 lbs</item>
<item>180 lbs</item>
<item>210 lbs</item>
<item>240 lbs</item>
<item>270 lbs</item>
</string-array>
<string-array name="weightValues">
<item>120</item>
<item>150</item>
<item>180</item>
<item>210</item>
<item>240</item>
<item>270</item>
</string-array>

这基本上是我所得到的。当然,我可以单击一个值,但它不会更改公式,因为它与我在 DrinkingBuddy.java 中创建的 double 没有关联。设置中显示的所有东西现在都只是空壳,包括主布局上的微调器(默认时间设置为 1 小时)

我确实创建了一个 Preferences.java 并尝试实现在教程和网络资源中找到的各种代码组合,但无济于事。无论如何,这里充满了尝试使 beerPref(更改啤酒中多少盎司的设置选项)与我的主类中的变量相关联的失败尝试:

package com.dantoth.drinkingbuddy;


import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.Preference.OnPreferenceClickListener;


public class Preferences extends PreferenceActivity {

public static final String PREF_BEER_SIZE = "PREF_BEER_SIZE";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);

//Get the custom preference



Preference beerPref = (Preference) findPreference("beerPref");
beerPref.setOnPreferenceClickListener(new OnPreferenceClickListener() {

public boolean onPreferenceClick(Preference preference) {

SharedPreferences customSharedPreference = getSharedPreferences("myCustomSharedPrefs", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = customSharedPreference.edit();

editor.commit();
return true;
}}

);}
}

完整的教程和示例代码会很棒,因为我还没有找到任何可靠的指南。

最佳答案

我仍在自己解决所有这些问题,但是(在某种程度上改编 self 的版本)我认为您的 Preferences 类只需要执行以下操作:

public class Preferences extends PreferenceActivity {

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

// load the XML preferences file
addPreferencesFromResource(R.xml.preferences);
}
}

然后在你的主类中,可以引用preferences:

public class DrinkingBuddy extends Activity 
implements OnSharedPreferenceChangeListener {

private int weight;

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

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);

// register preference change listener
prefs.registerOnSharedPreferenceChangeListener(this);

// and set remembered preferences
weight = Integer.parseInt((prefs.getString("weightPref", "120")));
// etc
}

// handle updates to preferences
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
if (key.equals("weightValues")) {
weight = Integer.parseInt((prefs.getString("weightPref", "120")));
}
// etc
}
}

为您处理首选项更新的保存。

(不太确定公共(public)/私有(private)声明!)

关于android - 如何获得在 Android 中工作的首选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3011604/

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