Изменение поведения EditTextPreference при нажатии

Я пытаюсь изменить поведение EditTextPreference для своих нужд. Он содержит путь, который я установил, используя намерение. Моя проблема в том, что он также открывает свой собственный фрагмент, чтобы изменить его текст. Я получаю 2 последовательных окна: ACTION_OPEN_DOCUMENT_TREE, которое я хотел, и окна по умолчанию для записи простой строки в поле.

Здесь SettingFragment.java:

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

    Preference editTextPreference = getPreferenceManager().findPreference("path");
    if (editTextPreference != null) {
        editTextPreference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {

            @Override
            public boolean onPreferenceClick(Preference arg0) {
                Intent secondActivity = new Intent(ACTION_OPEN_DOCUMENT_TREE);
                startActivityForResult(secondActivity, RQS_OPEN_DOCUMENT_TREE);

                return true;
            }
        });
    }
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == RESULT_OK && requestCode == RQS_OPEN_DOCUMENT_TREE) {
        Uri treeUri = data.getData();
        System.out.println(treeUri.toString());
        String path = FileUtil.getFullPathFromTreeUri(treeUri, getContext());

        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
        sharedPreferences.edit().putString("path",path).apply();
    }
}

Здесь связанный xml:

<androidx.preference.PreferenceScreen xmlns:app = "http://schemas.android.com/apk/res-auto"
xmlns:android = "http://schemas.android.com/apk/res/android">

<PreferenceCategory>
    <EditTextPreference
        app:key = "path"
        app:title = "@string/path_title"
        app:useSimpleSummaryProvider = "true"
    />
</PreferenceCategory>

Я попытался изменить EditTextPreference на Preference, но значение больше не отображалось. Я обнаружил, что useSimpleSummaryProvider можно применять только к ListPreference и EditTextPreference. Я также пытался отключить его, но он больше не срабатывал onPreferenceClick(). Есть ли способ выполнить только onPreferenceClick, а не фрагмент по умолчанию, или лучший способ справиться с этим?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
47
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

попробуй это

@Override
    public boolean setOnPreferenceClickListener(Preference preference) {
        if (preference.getKey().equals("path")){
           Intent secondActivity = new Intent(ACTION_OPEN_DOCUMENT_TREE);
           startActivityForResult(secondActivity, RQS_OPEN_DOCUMENT_TREE);
            return true;
        }
        return false;
    }

Спасибо за ответ. У меня все еще открываются оба фрагмента. Я думаю, проблема в том, что я добавляю новый eventListener, а «по умолчанию» все еще срабатывает.

Neithalf 30.05.2019 01:19

Не могли бы вы попробовать с OnPreferenceClickListener, как указано в редактировании?

ismail alaoui 30.05.2019 01:42
Ответ принят как подходящий

Мне удалось обойти проблему, используя Preference вместо EditTextPreference. Так что теперь он открывает только ACTION_OPEN_DOCUMENT_TREE. Затем я использовал этот код, чтобы установить нужное мне резюме:

Preference editPreference = getPreferenceManager().findPreference("path");
editPreference.setSummary(sharedPreferences.getString("path", "Le chemin n'est pas défini"));

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