【问题标题】:Preference Fragment setOnPreferenceClickListener Not Working首选项片段 setOnPreferenceClickListener 不工作
【发布时间】:2014-11-18 22:47:43
【问题描述】:

我目前正在尝试在我的应用程序中实现首选项片段,但在设置 setOnPreferenceClickListener 时遇到问题。似乎侦听器根本不工作,并且代码从未被实现。我现在只是在听众中放了一个 Toast 作为测试。我浏览了许多论坛,到目前为止还没有找到一个好的答案。代码如下。提前致谢!

SettingFragment.java

public class SettingsFragment extends PreferenceFragment {

    private OnFragmentInteractionListener mListener;

    private Preference mFontPreference;
    private Preference mFontSizePreference;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.fragment_settings);

        mFontPreference = findPreference("font_preference");
        mFontSizePreference = findPreference("font_size_preference");

        mFontPreference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
            @Override
            public boolean onPreferenceClick(Preference preference) {
                String key = preference.getKey();
                Toast.makeText(getActivity(), key, Toast.LENGTH_LONG).show();
                return true;
            }
        });
    }

fragment_settings.xml

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

    <PreferenceCategory android:title="Text Settings">

        <ListPreference
            android:enabled="true"
            android:key="font_preference"
            android:title="Font"
            android:summary="Select a Font"
            android:entries="@array/font_spinner_array"
            android:entryValues="@array/font_spinner_array"/>

        <ListPreference
            android:enabled="true"
            android:key="font_size_preference"
            android:title="Font Size"
            android:summary="Select a Font Size"
            android:entries="@array/font_size_array"
            android:entryValues="@array/font_size_value_array"/>

    </PreferenceCategory>

</PreferenceScreen>

数组.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="font_spinner_array">
        <item>System Font</item>
        <item>Helvetica</item>
        <item>Helvetica-Neue</item>
        <item>Impact</item>
    </string-array>
    <string-array name="font_size_array">
        <item>Small</item>
        <item>Medium</item>
        <item>Large</item>
    </string-array>
    <string-array name="font_size_value_array">
        <item>1</item>
        <item>2</item>
        <item>3</item>
    </string-array>

编辑: 所以 Toast 没有工作,因为它没有 .show()。已修复,单击时会显示“font_preference”。侦听器正在工作,但我想提取用户单击的条目的值,而不是整个首选项的键。有没有办法做到这一点?

【问题讨论】:

    标签: android android-fragments android-preferences preferencefragment onpreferenceclicklistener


    【解决方案1】:

    常见的错误。你忘记展示吐司了:

    Toast.makeText(getActivity(), key, Toast.LENGTH_LONG)
            .show();
    

    我坚持使用 Log.e 进行测试的原因之一 :)

    编辑:

    findPreference("font_size_preference").setOnPreferenceChangeListener(
            new Preference.OnPreferenceChangeListener() {
        @Override
        public boolean onPreferenceChange(Preference preference, Object o) {
            Log.e("", "New value is: " + o.toString());
            // True to update the state of the Preference with the new value.
            return true;
        }
    });
    

    您可以在通常的位置阅读返回值 - The Docs

    【讨论】:

    • 当然可以。现在让我测试一下。在将密钥简化为敬酒之前,我在将密钥传递给外部方法时遇到了一些麻烦。等我回家再试一试。
    • 好的,Toast 工作正常,但问题是它正在显示键“font_preference”。我想 Toast/Log 列表首选项“系统字体、Helvertica 等”中条目的值。如何提取用户点击的条目?
    • 太棒了!这正是我正在寻找的。如果您将其发布为答案,我会为您单击检查
    • 另外,只是好奇,我应该在监听器中返回 true 还是 false?它默认为 false,但似乎可以使用任何一种方式
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-22
    • 2021-02-20
    • 2017-07-12
    • 1970-01-01
    • 1970-01-01
    • 2015-09-30
    相关资源
    最近更新 更多