0

我有一個EditTextPreference,我想在兩個不同的PreferenceScreen中向用戶顯示。它應該是完全相同的首選項(讓android:鍵爲「myEditText」),只顯示在兩個不同的屏幕上。 所以,這裏是它可能看起來像(完全剝奪了向您展示一個例子)什麼:Android:在首選項xml中多次使用相同的首選項

<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並輸入文字,它不是所示,當我回去開myEditText通過其他屏幕。我必須關閉偏好並再次打開它。然後,兩個EditTexts顯示相同的文本。

那麼,在不同屏幕上擁有完全相同的首選項的最佳方式是什麼?

/編輯:

爲什麼我要這麼做啊? 第一個PreferenceScreen是關於URL縮短的。您可以設置縮短選項,選擇/重新排序要使用的服務,並輸入bit.ly,goo.gl等用戶憑據。

第二個屏幕用於文件上載服務,您可以在其中執行相同的操作(設置選項用於文件上傳,選擇/重新排序服務,輸入用於上載服務的用戶憑證)。

現在我正在整合CloudApp,它既是一個文件,也是一個URL縮短服務。因此,用戶可能會嘗試在URL縮短屏幕上找到它,但他也可能會在文件上傳屏幕上查找它。所以,我想讓他變得簡單,並在兩個屏幕上都顯示出來。它們不是頂級屏幕,它有相當深的結構。

所以,除了這個有意義之外:是否有可能?

+0

爲什麼你認爲這是一個好主意呢? – CommonsWare 2011-02-23 12:15:39

+0

我編輯了這個問題來回答這個問題。 – Manuel 2011-02-23 12:58:28

回答

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