Я пытаюсь изменить поведение 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, а не фрагмент по умолчанию, или лучший способ справиться с этим?
попробуй это
@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;
}
Не могли бы вы попробовать с OnPreferenceClickListener, как указано в редактировании?
Мне удалось обойти проблему, используя Preference вместо EditTextPreference. Так что теперь он открывает только ACTION_OPEN_DOCUMENT_TREE. Затем я использовал этот код, чтобы установить нужное мне резюме:
Preference editPreference = getPreferenceManager().findPreference("path");
editPreference.setSummary(sharedPreferences.getString("path", "Le chemin n'est pas défini"));
Спасибо за ответ. У меня все еще открываются оба фрагмента. Я думаю, проблема в том, что я добавляю новый eventListener, а «по умолчанию» все еще срабатывает.