0

我有一个 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 时,它不会显示。我必须关闭首选项并再次打开它。然后,两个 EditText 显示相同的文本。

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

/编辑:

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

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

现在我正在集成 CloudApp,它既是文件又是 URL 缩短服务。因此,用户可能希望在 URL 缩短屏幕上找到它,但他也可能在文件上传屏幕上查找它。所以,我想让他轻松一点,然后在两个屏幕上都显示出来。它们不是顶级屏幕,它是一个相当深的结构。

所以,除了这是否有意义:这可能吗?

4

1 回答 1

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

于 2011-02-25T15:07:46.427 回答