【问题标题】:Android - Populate Spinner ArrayAdapter from value specified in Settings ListPreferenceAndroid - 根据设置 ListPreference 中指定的值填充 Spinner ArrayAdapter
【发布时间】:2014-10-02 12:14:40
【问题描述】:

我的代码应该从我的设置活动中的 listpreference 中获取指定的值,并使用指定的内容为我的微调器填充 arrayadapter。目前我正在尝试在 onResume 中完成此操作。我的微调器是spLoadFrom。下面是代码:

显示 Spinner 的 Fragment 的 onResume:

@Override
    public void onResume() {
    super.onResume();
    SharedPreferences getPrefs = PreferenceManager.getDefaultSharedPreferences(getActivity().getBaseContext());

    Integer values = getPrefs.getInt("prefSections", 1);

    switch (values) {
        case 1:
            ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(this.getActivity(), android.R.layout.simple_spinner_item, displayName);
            spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
            spLoadFrom.setAdapter(spinnerArrayAdapter);
            SpinnerListener spListener = new SpinnerListener();

            spLoadFrom.setOnItemSelectedListener(spListener);
            break;
        case 2:
            ArrayAdapter<String> spinnerArrayAdapter2 = new ArrayAdapter<String>(this.getActivity(), android.R.layout.simple_spinner_item, displayName2);
            spinnerArrayAdapter2.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
            spLoadFrom.setAdapter(spinnerArrayAdapter2);
            SpinnerListener spListener2 = new SpinnerListener();

            spLoadFrom.setOnItemSelectedListener(spListener2);
            break;
        case 3:
            ArrayAdapter<String> spinnerArrayAdapter3 = new ArrayAdapter<String>(this.getActivity(), android.R.layout.simple_spinner_item, displayName3);
            spinnerArrayAdapter3.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
            spLoadFrom.setAdapter(spinnerArrayAdapter3);
            SpinnerListener spListener3 = new SpinnerListener();

            spLoadFrom.setOnItemSelectedListener(spListener3);
            break;
        case 4:
            ArrayAdapter<String> spinnerArrayAdapter4 = new ArrayAdapter<String>(this.getActivity(), android.R.layout.simple_spinner_item, displayName4);
            spinnerArrayAdapter4.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
            spLoadFrom.setAdapter(spinnerArrayAdapter4);
            SpinnerListener spListener4 = new SpinnerListener();

            spLoadFrom.setOnItemSelectedListener(spListener4);
            break;
        case 5:
            ArrayAdapter<String> spinnerArrayAdapter5 = new ArrayAdapter<String>(this.getActivity(), android.R.layout.simple_spinner_item, displayName5);
            spinnerArrayAdapter5.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
            spLoadFrom.setAdapter(spinnerArrayAdapter5);
            SpinnerListener spListener5 = new SpinnerListener();

            spLoadFrom.setOnItemSelectedListener(spListener5);
            break;
        default:
            ArrayAdapter<String> spinnerArrayAdapterd = new ArrayAdapter<String>(this.getActivity(), android.R.layout.simple_spinner_item, displayName);
            spinnerArrayAdapterd.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
            spLoadFrom.setAdapter(spinnerArrayAdapterd);
            SpinnerListener spListenerd = new SpinnerListener();

            spLoadFrom.setOnItemSelectedListener(spListenerd);
    }
}

我的 settings.xml:

<?xml version="1.0" encoding="utf-8"?>

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

<PreferenceCategory android:title="@string/prefUpdateCat">
    <CheckBoxPreference
        android:key="prefUpdate"
        android:summary="On/Off"
        android:title="Check for updates" />
</PreferenceCategory>

<PreferenceCategory android:title="@string/prefSectionsCat">
    <ListPreference
        android:key="pref_Sections"
        android:entries="@array/prefSections"
        android:entryValues="@array/prefSectionsValues"
        android:summary="How the 7110.65 should be displayed"
        android:title="7110.65 displayed" />
</PreferenceCategory>

</PreferenceScreen>

我的arrays.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>

<string-array name="prefSections">
    <item name="sec">Split by Section</item>
    <item name="secchap">Split by Section with Chapters</item>
    <item name="secchapwhole">Split by Section with Chapters and the entire document</item>
    <item name="chap">Split by Chapters</item>
    <item name="chapwhole">Split by Chapters and the entire document</item>
</string-array>
<string-array name="prefSectionsValues">
    <item>1</item>
    <item>2</item>
    <item>3</item>
    <item>4</item>
    <item>5</item>
</string-array>

</resources>

设置活动:

public class SettingsActivity extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener{

private static final String TAG = "MYAPP";

@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@Override
public void onCreate (Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.settings);
    PreferenceManager.setDefaultValues(SettingsActivity.this, R.xml.settings, false);
    getActionBar().setDisplayHomeAsUpEnabled(true);
}

@Override
public boolean onOptionsItemSelected(MenuItem item){
    switch (item.getItemId()){
        case android.R.id.home:
            NavUtils.navigateUpFromSameTask(this);
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
    Log.d(TAG, "Prefs have changed");

}
}

如何正确加载用户选择的部分的值?

【问题讨论】:

    标签: android android-fragments settings android-preferences listpreference


    【解决方案1】:

    我想我在进一步浏览 StackOverflow 后找到了我的问题的答案,但如果其他人遇到此问题,我会在此处继续提供答案。

    我不得不将我的values 更改为:

    Integer values = Integer.parseInt(getPrefs.getString("pref_Sections", ""));
    

    而不是将其作为:

    Integer values = getPrefs.getInt("prefSections", 1);
    

    我是通过查看ilsyhere 发布的答案得到这个想法的。

    【讨论】:

    • 是的,我正要说您的偏好键与您的值变量不匹配。而且,不要使用 ("pref_Sections", "") 使用 ("pref_Sections", -1)
    • @mtorres 你为什么建议使用-1?这将如何影响代码/结果?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-04
    • 1970-01-01
    相关资源
    最近更新 更多