我有一个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缩短屏幕上找到它,但他也可能在文件上传屏幕上查找它。所以,我想让他轻松一点,只需在两个屏幕上显示它。它们不是顶级屏幕,它是一个非常深的结构。
所以,除了这个有意义之外:是否可能?
答案 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具有相同的条目。