单击时更改EditTextPreference的行为

时间:2019-05-29 22:00:37

标签: java android android-fragments

我正在尝试根据需要更改EditTextPreference的行为。 它拥有我使用意图设置的路径。 我的问题是还要打开自己的片段来修改他的文本。 我最后得到了两个连续的窗口:我想要的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而不是默认片段,或者有更好的方法来处理此问题?

2 个答案:

答案 0 :(得分:0)

尝试

@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;
    }

答案 1 :(得分:0)

我设法使用Preference而不是EditTextPreference来解决问题。因此,现在只打开ACTION_OPEN_DOCUMENT_TREE。 然后,我使用此代码来设置所需的摘要:

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