ListPreferences;从字符串数组中获取选项

时间:2015-06-13 23:30:17

标签: java android arrays xml preferences

我目前正在通过Udacity学习Android开发的基础知识。该课程现在要求我在应用程序上进行设置,以便用户选择温度应该是华氏温度还是摄氏温度。我已经在xml中创建了一个数组,供用户选择他们的偏好,但我不知道如何将这些信息传递给我的java代码。我提供了一些可能出现此问题的地方。截至目前,代码显示并正常工作,直到用户更改

pref_general.xml

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

    <EditTextPreference
        android:key="Location"
        android:title="location"
        android:defaultValue="85383"
        android:inputType="text"
        android:singleLine="true"/>

    <ListPreference
        android:title="@string/pref_units_label"
        android:key="@string/pref_units_key"
        android:defaultValue="@string/pref_units_metric"
        android:entryValues="@array/pref_units_values"
        android:entries="@array/pref_units_options"/>

    </PreferenceScreen>

arrays.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="pref_units_values">
        <item>"@st</item>
        <item>Fahrenheit</item>
        <item>Celsius</item>
    </string-array>
    <string-array name="pref_units_options">
    </string-array>
</resources>

strings.xml(部分内容)

<resources>
...
    <string name="pref_units_label">Temperature Style</string>
    <string name="pref_units_key">"@array/pref_units_values"</string>
    <string name="pref_units_metric">Celsius</string>
    <string name="pref_units_values">Values</string>
    <string name="pref_units_imperial">Fahrenheit</string>
</resources>

ForecastFragment.java(使用ListPreferences的方法)

private String formatHighLows(double high, double low) {
            SharedPreferences shared = PreferenceManager.getDefaultSharedPreferences(getActivity());
            String unitType = shared.getString(getString(R.string.pref_units_key),
                    getString(R.string.pref_units_metric));

            if (unitType.equals(getString(R.string.pref_units_imperial))) {
                high = (high * 1.8) + 32;
                low = (low * 1.8) + 32;
            } else if (!unitType.equals(getString(R.string.pref_units_metric))) {
                Log.d(LOG_TAG, "Unit type not found: " + unitType);
            }
            // For presentation, assume the user doesn't care about tenths of a degree.
            long roundedHigh = Math.round(high);
            long roundedLow = Math.round(low);
            String highLowStr = roundedHigh + "/" + roundedLow;
            return highLowStr;
        }

我觉得问题可能在于xml文件。我以前有过java经验,但我对xml几乎一无所知。任何可以提供的建议都表示赞赏。谢谢。

1 个答案:

答案 0 :(得分:0)

请你更具体一点吗?你试图让用户在unities之间做出选择,我相信第一部分就是定义你想在屏幕上显示这个选项的方式(例如,单选按钮,ListView,捕获内容)在EditText中,接下来您将在此布局项中添加一些Listener,因此当某些事件发生时,您将能够捕获其值。你有哪些问题?