2011-04-18 72 views
2

在我的PreferenceActivity中,我有一些首選項。 一個我從佈局膨脹:在PreferenceActivity中找不到TextView

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    addPreferencesFromResource(R.layout.settings); 
    ... 
} 

protected void onResume() {  
    super.onResume(); 
    Preference registrationStatus = (Preference) findPreference("registrationStatusPref"); 
    if (!TextUtils.isEmpty(somestring){ 
     registrationStatus.setLayoutResource(R.layout.push_reg_status); 
     TextView push_reg_status_txt = (TextView)findViewById(R.id.pushRegTxtPref); 
    } 
    .... 
} 

push_reg_status_txtpush_reg_status佈局一個TextView,而push_reg_status_txt始終爲空。

push_reg_status佈局:

.... 
<TextView 
     android:id="@+id/pushRegTxtPref" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="2dp" 
     android:layout_marginBottom="4dp" 
     android:text="Registration Succesful" 
     android:textColor="#99ff33" 
     android:gravity="center_horizontal" 
     android:layout_gravity="center_horizontal"/> 
..... 

爲什麼?

回答

0

也許是因爲您調用了您的Activity的findViewById,而不是調用registrationStatus對象的相同方法。

+0

registrationStatus是首選項。 而push_reg_status_txt是佈局中的TextView,它擴大了此首選項。 如何調用findViewById作爲首選? – vsvydenko 2011-04-18 14:11:16

3

Preference.setLayoutResource()僅更新內部參考的是偏愛有一個佈局ID,它實際上並沒有更新的佈局,重新顯示。因此,您用findViewById()尋找的TextView不會被誇大用於您的使用。唯一的地方首選項膨脹他們的佈局是創建時。

您可能需要在開始時設置該自定義佈局(在addPreferencesFromResource()之前將所有內容誇大),或者調整現有首選項的標題/摘要屬性,而不是設置「註冊成功」字符串。此外,如果您使用的是自定義首選項佈局,請確保您遵循SDK Documentation中規定的規則。

希望有助於!