Android:在首选项xml中多次使用相同的首选项

时间:2011-02-23 10:13:21

标签: android xml preferences android-preferences sharedpreferences

我有一个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>

当我通过someScreen访问myEditText并输入文本时,当我返回并通过someOtherScreen打开myEditText时,它不显示。我必须关闭首选项并再次打开它。然后,两个EditTexts显示相同的文本。

那么,在不同的屏幕上拥有完全相同的偏好的最佳方法是什么?

/编辑:

为什么我要这样做呢? 第一个PreferenceScreen是关于URL缩短的全部内容。您可以设置缩短选项,选择/重新排序要使用的服务,并输入bit.ly,goo.gl等的用户凭据。

第二个屏幕用于文件上传服务,您可以在其中执行相同操作(设置文件上载选项,选择/重新排序服务,输入上传服务的用户凭据)。

现在我正在整合CloudApp,它既是文件又是URL缩短服务。因此,用户可能希望在URL缩短屏幕上找到它,但他也可能在文件上传屏幕上查找它。所以,我想让他轻松一点,只需在两个屏幕上显示它。它们不是顶级屏幕,它是一个非常深的结构。

所以,除了这个有意义之外:是否可能?

1 个答案:

答案 0 :(得分:1)

好的,这就是我现在正在做的事情。它并不漂亮,但它完成了这项工作,目前我对此感到满意:

使用不同的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具有相同的条目。