首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在PreferenceFragmentCompat中单击时触发事件

如何在PreferenceFragmentCompat中单击时触发事件
EN

Stack Overflow用户
提问于 2019-11-02 23:05:53
回答 2查看 2.7K关注 0票数 1

我用雄激素。在设置片段中,我希望创建“首选项”按钮,并单击它们来触发一些单独的事件。

如何对特定的首选项实现单击侦听器?

这是我的准则:

代码语言:javascript
运行
复制
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.appcompat.widget.Toolbar;
import androidx.preference.PreferenceFragmentCompat;
import androidx.preference.PreferenceManager;
import androidx.preference.PreferenceScreen;

public class SettingsFragment extends PreferenceFragmentCompat {

    @Override
    public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {

        addPreferencesFromResource(R.xml.preference);

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View view = super.onCreateView(inflater, container, savedInstanceState);
        view.setBackgroundColor(getResources().getColor(R.color.graylight));

        Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar);
        toolbar.setTitle(R.string.action_settings);
        toolbar.setLogo(R.drawable.ic_settings_white_24dp);

        PreferenceManager preferenceManager = getPreferenceManager();
        PreferenceScreen preferenceScreen = getPreferenceScreen();

        return view;
    }

}

和XML:

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <PreferenceCategory
        android:title="@string/setting_person"
        app:initialExpandedChildrenCount="0"
        app:key="profile_set">

        <Preference
            android:id="@+id/preference2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:key="button1"
            android:summary="@string/setting_person_data"
            android:title="@string/setting_person_reg"
            app:icon="@drawable/ic_assignment" />
        <Preference
            android:key="button"
            android:summary="@string/setting_avatar"
            android:title="@string/setting_avatar_chg"
            app:icon="@drawable/ic_wallpaper_black_24dp" />

    </PreferenceCategory>

</PreferenceScreen>

因此,我想在MainActivity中单击触发器一个事件。但是这是另一个问题,至少现在我应该听一听这个事件,例如按下按钮的键调用Toast。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-03 22:52:45

经过多次折磨后,找到了如下解决方案:(对于AndroidX)

代码语言:javascript
运行
复制
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.appcompat.widget.Toolbar;
import androidx.preference.Preference;
import androidx.preference.PreferenceFragmentCompat;

public class SettingsFragment extends PreferenceFragmentCompat {

        @Override
        public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {

            addPreferencesFromResource(R.xml.preference);

            Preference preferenceMap = findPreference("button");

            preferenceMap.setOnPreferenceClickListener(
                    new Preference.OnPreferenceClickListener() {
                        @Override
                        public boolean onPreferenceClick(Preference arg0) {
                            getActivity().onBackPressed();
                            ((MainActivity) getActivity()).injectSetting("map");
                            return true;
                        }
                    });

        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

            View view = super.onCreateView(inflater, container, savedInstanceState);
            view.setBackgroundColor(getResources().getColor(R.color.graylight));

            Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar);
            toolbar.setTitle(R.string.action_settings);
            toolbar.setLogo(R.drawable.ic_settings_white_24dp);

            return view;
        }

    }

在XML中,androidx.preference被添加到元素中:

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="utf-8"?>
<androidx.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <androidx.preference.PreferenceCategory
        android:title="@string/setting_person"
        app:initialExpandedChildrenCount="1"
        app:key="profile_set">

        <androidx.preference.Preference
            android:id="@+id/preference1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:key="button"
            android:summary="@string/setting_person_data"
            android:title="@string/setting_person_reg"
            app:icon="@drawable/ic_assignment" />
        <androidx.preference.Preference
            android:id="@+id/preference2"
            android:key="button2"
            android:summary="@string/setting_avatar"
            android:title="@string/setting_avatar_chg"
            app:icon="@drawable/ic_wallpaper_black_24dp" />
    </androidx.preference.PreferenceCategory>

</androidx.preference.PreferenceScreen>

不要忘记在build.gradle依赖项上:

代码语言:javascript
运行
复制
implementation 'androidx.preference:preference:1.1.0'

也许有人会需要)

票数 4
EN

Stack Overflow用户

发布于 2019-11-02 23:19:38

找到的首选项,然后在它上设置一个单击监听器

代码语言:javascript
运行
复制
public class SettingsFragment extends PreferenceFragmentCompat {

    @Override
    public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {

        addPreferencesFromResource(R.xml.preference);

        Preference preference = findPreference("button1");
        preference.setOnClickListener(new OnPreferenceClickListener() {
            @Override
            public boolean onPreferenceClick(Preference p) {
                // Handle preference click
            }
        });
    }
}

请查阅有关使用首选项的文档:

https://developer.android.com/reference/androidx/preference/package-summary.html https://developer.android.com/reference/androidx/preference/PreferenceFragmentCompat.html https://developer.android.com/reference/androidx/preference/PreferenceFragmentCompat.html#findPreference(java.lang.CharSequence) https://developer.android.com/reference/androidx/preference/Preference.OnPreferenceClickListener.html

希望这能帮上忙!

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58676040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档