Preference.setLayoutResource(R.layout.my_custom_layout) не принимает OnClickListener

Я пытаюсь настроить простой SettingsFragment с одним из Preference, настроенным с помощью макета xml, и установить OnClickListener для этого настроенного Preference. На данный момент ни один способ не работает. Что я упускаю, пожалуйста?

Я пробовал реализовать OnPreferenceClickListener и OnPreferenceTreeClickListener, но безуспешно.

Это мой файл delete_btn_layout.xml

<?xml version = "1.0" encoding = "utf-8"?>
<LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"
    xmlns:app = "http://schemas.android.com/apk/res-auto"
    xmlns:tools = "http://schemas.android.com/tools"
    android:id = "@+id/delete_account_linear_layout"
    android:layout_width = "match_parent"
    android:layout_height = "wrap_content"
    tools:context = "com.example.package.SettingsActivity">

    <Button
        android:id = "@+id/delete_account_btn"
        android:layout_width = "0dp"
        android:layout_weight = "1"
        android:layout_height = "@dimen/size_b"
        android:text = "@string/delete_account"
        android:textColor = "@android:color/white"
        android:background = "@drawable/background_btn"
        android:layout_margin = "@dimen/size_s" />
</LinearLayout>

И это мой элемент Preference в <PreferenceScreen .../>

...
    <PreferenceCategory app:title = "@string/account_category">

        <Preference
            app:icon = "@drawable/ic_delete_primary_dark_24"
            app:key = "delete_account"
            app:title = "@string/delete_account"/>
    </PreferenceCategory>
...

И это мой SettingsFragment с одной ведьмой "... ClickListener", которая не работает

    public static class SettingsFragment extends PreferenceFragmentCompat {

        @Override
        public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
            setPreferencesFromResource(R.xml.root_preferences, rootKey);

            Preference test = SettingsFragment.this.findPreference("delete_account");
            if (test != null) {
                test.setLayoutResource(R.layout.delete_btn_layout);
                test.setOnPreferenceClickListener(preference -> {
                    ViewWidgets.showSnackBar(1,getView(),"delete ?");
                    // do some action
                    return true;
                });
            } else {
                ViewWidgets.showSnackBar(1,getView(),"Error, Please retray.");
            }
        }

Любая помощь, пожалуйста.

0
0
168
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Для тех, кто может столкнуться с подобной проблемой, описываю решение, которое применил. Обнаружение события щелчка я вставил в действие (class SettingsActivity), которое содержит SettingsFragment. С помощью метода «deleteUserAccount», который инициализирует процесс:

    public void deleteUserAccount(View view) {
        openDialog();
    }

Ссылку на это событие я вставил в кнопку по-старому методом onClick:

    <Button
        android:id = "@+id/delete_account_btn"
        android:layout_width = "0dp"
        android:layout_weight = "1"
        android:layout_height = "@dimen/size_b"
        android:text = "@string/delete_account"
        android:textColor = "@android:color/white"
        android:background = "@drawable/background_google_btn"
        android:layout_margin = "@dimen/size_s"
        android:onClick = "deleteUserAccount"/>

Другие вопросы по теме