Android: использование одного и того же предпочтения несколько раз в настройках xml - PullRequest
0 голосов
/ 23 февраля 2011

У меня есть EditTextPreference, который я хочу показать пользователю на двух разных экранах PreferenceScreens. Предполагается, что это одно и то же предпочтение (пусть android: key будет "myEditText"), только что показанное на двух разных экранах. Итак, вот как это может выглядеть (полностью урезано, чтобы показать вам пример):

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <PreferenceCategory android:title="@string/someCategory">
        <PreferenceScreen android:key="someScreen">
            <PreferenceScreen android:key="someSubScreen">
                <PreferenceCategory android:title="@string/someSubCategory">
                    <EditTextPreference android:key="myEditText"
                    ....
                    />
                </PreferenceCategory>
            </PreferenceScreen>
        </PreferenceScreen>
    </PreferenceCategory>
    <PreferenceCategory android:title="@string/someOtherCategory">
        <PreferenceScreen android:key="someOtherScreen">
            <PreferenceScreen android:key="someOtherSubScreen">
                <PreferenceCategory android:title="@string/someOtherSubCategory">
                    <EditTextPreference android:key="myEditText"
                    ....
                    />
                </PreferenceCategory>
            </PreferenceScreen>
        </PreferenceScreen>
    </PreferenceCategory>
</PreferenceScreen>

Когда я захожу в myEditText через someScreen и ввожу текст, он не отображается, когда я возвращаюсь и открываю myEditText через someOtherScreen. Я должен закрыть настройки и открыть его снова. Затем оба EditTexts показывают один и тот же текст.

Итак, как лучше всего иметь одинаковые предпочтения на разных экранах?

/ Edit:

Почему я так хочу? Первый PreferenceScreen - это сокращение URL. Вы можете установить параметры для сокращения, выбрать / изменить порядок услуг, которые вы хотите использовать, и ввести учетные данные пользователя для bit.ly, goo.gl и т. Д.

Второй экран предназначен для служб загрузки файлов, где вы можете сделать то же самое (настройка параметров загрузки файлов, выбор / изменение порядка служб, ввод учетных данных пользователя для служб загрузки).

Теперь я интегрирую CloudApp, который является одновременно и файлом, и службой сокращения URL. Таким образом, пользователь может найти его на экране сокращения URL, но он также может искать его на экране загрузки файла. Итак, я хочу, чтобы ему было легко и просто показать это на обоих экранах. Это не экраны верхнего уровня, это довольно глубокая структура.

Итак, помимо этого имеет смысл или нет: возможно ли это?

1 Ответ

1 голос
/ 25 февраля 2011

Хорошо, вот что я делаю сейчас. Это не красиво, но это делает работу, и на данный момент я доволен этим:

Вместо использования одного и того же ключа используйте разные EditTextPreferences (скажем, myEditText и myEditText2). В коде предпочтения создайте OnPreferenceChangeListener:

    final OnPreferenceChangeListener myEditTextChangeListener = new OnPreferenceChangeListener() {
        public boolean onPreferenceChange(Preference preference, Object newValue) {
            String newEntry = (String)newValue;
            myEditText.setText(newEntry);
            myEditText2.setText(newEntry);
            return false;
        }
    }; 

Назначьте прослушиватель обоим EditTextPreferences:

myEditText.setOnPreferenceChangeListener(myEditTextChangeListener);
myEditText2.setOnPreferenceChangeListener(myEditTextChangeListener);

В основной операции, где зарегистрирован OnSharedPreferenceChangeListener, мне нужно только отслеживать изменения в первом EditText. На самом деле я полностью игнорирую второй EditText, потому что он всегда имеет ту же запись, что и первый EditText.

...